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多媒体

Download history 2/week @ 2024-03-10 7/week @ 2024-03-31 7/week @ 2024-04-14 38/week @ 2024-04-28 2/week @ 2024-05-05

每月51 次下载

MIT 许可证

61KB
1K SLoC

Pareen

Docs Status license Crates.io

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,
);

绘图

RustGnuplotexamples/plots.rs 中有一个示例,展示了如何将一些动画作为绘图显示。假设已经安装了 gnuplot,则可以按如下方式执行

cargo run --example plots --feature easer

如果一切正常,您应该会看到类似这样的内容:示例/plots.rs 动画的绘图

依赖关系

~220KB