14 个版本
0.3.3 | 2023年8月1日 |
---|---|
0.3.2 | 2023年6月3日 |
0.3.1 | 2022年8月31日 |
0.2.6 | 2020年8月17日 |
0.1.3 | 2019年12月3日 |
#32 在 多媒体
每月51 次下载
61KB
1K SLoC
Pareen
Pareen 是一个 Rust 库,用于 参数化 插值。其预期应用在游戏编程中,有时你需要在两个离散的游戏状态之间平滑过渡,以达到可视化目的。
Pareen 提供了用于创建由时间参数化的动画的工具(即从时间到某些动画值的映射),而不必不断传递时间变量;它隐藏了管道,因此你只需在评估动画时提供一次时间。
动画的组成类似于 Rust 的迭代器,因此不需要进行内存分配。缺点是难以存储 pareen 的动画。建议的方法是在线构建和评估动画。
当前状态
我认为 pareen
是一种实验性的方法,而且我不确定我是否仍然对它感到满意。无论如何,缓动函数的集成需要一些关爱。非常欢迎贡献!
不幸的是,嵌套动画可能会导致编译时间呈指数级下降。目前,将中间动画装箱作为一种权宜之计,但这会降低可读性和效率。
示例
// An animation returning a constant value
let anim1 = pareen::constant(1.0f64);
// Animations can be evaluated at any time
let value = anim1.eval(0.5);
// Animations can be played in sequence
let anim2 = anim1.seq(0.7, pareen::prop(0.25) + 0.5);
// Animations can be composed and transformed in various ways
let anim3 = anim2
.lerp(pareen::circle().cos())
.scale_min_max(5.0, 10.0)
.backwards(1.0)
.squeeze(3.0, 0.5..=1.0);
let anim4 = pareen::cubic(&[1.0, 2.0, 3.0, 4.0]) - anim3;
let value = anim4.eval(1.0);
缓动器
可选地,您可以选择启用对从 easer
集成缓动函数的支持。
let first_anim = pareen::constant(2.0);
let second_anim = pareen::prop(1.0f32);
// Transition from first_anim to second_anim at time 0.5, applying cubic easing
// for 0.3 time units.
let anim = first_anim.seq_ease_in_out(
0.5,
easer::functions::Cubic,
0.3,
second_anim,
);
绘图
在 RustGnuplot 的 examples/plots.rs 中有一个示例,展示了如何将一些动画作为绘图显示。假设已经安装了 gnuplot
,则可以按如下方式执行
cargo run --example plots --feature easer
如果一切正常,您应该会看到类似这样的内容:
依赖关系
~220KB