6 个稳定版本
1.1.1 | 2022 年 7 月 11 日 |
---|---|
1.1.0 | 2022 年 7 月 6 日 |
1.0.4 | 2021 年 8 月 20 日 |
1.0.3 | 2020 年 7 月 5 日 |
1.0.2 | 2020 年 1 月 4 日 |
#70 在 游戏开发
17,462 每月下载量
在 9 个 库中使用 (8 个直接使用)
43KB
882 行
keyframe
一个用于 Rust 的简单动画库
功能
- 包含多种缓动函数,包括用户自定义的 Bézier 曲线(如 CSS cubic-bezier)和可关键帧化的曲线
- 动画序列(如 CSS @keyframes)
- 支持 2D/3D/4D 的mint 集成(点、矩形、颜色等)
用法
使用 keyframe::ease(function, from, to, time)
函数在两个值之间进行缓动。 from
和 to
可以是任何实现了 CanTween
的类型,如 f64
或 mint::Vector2
,而 time
需要是一个介于零和一之间的浮点值。 function
指定了 from
和 to
之间的转换,并且是任何实现了 EasingFunction
的类型。
keyframe::AnimationSequence
可用于创建更复杂的动画,并跟踪关键帧、时间等。您可以使用 keyframes![...]
宏、迭代器或向量创建动画序列。
示例
示例可视化器包含在 examples/
目录中。运行 cargo run --example visualizer --release
以启动它。 (ggez 在调试模式下真的很慢!)
缓动
use keyframe::{ease, functions::EaseInOut};
fn example() -> f64 {
let a = 0.0;
let b = 2.0;
let time = 0.5;
ease(EaseInOut, a, b, time)
}
动画序列
use keyframe::{keyframes, Keyframe, AnimationSequence};
fn example() {
// (value, time) or (value, time, function)
let mut sequence = keyframes![
(0.5, 0.0), // <-- EaseInOut used from 0.0 to 0.3
(1.5, 0.3, Linear), // <-- Linear used from 0.3 to 1.0
(2.5, 1.0) // <-- Easing function here is never used, since we're at the end
];
sequence.advance_by(0.65);
assert_eq!(sequence.now(), 2.0);
assert_eq!(sequence.duration(), 1.0);
}
自定义结构
use keyframe::mint::Point2;
// This macro works with any structure as long as it only consists of types that implement "CanTween"
use keyframe_derive::CanTween;
#[derive(CanTween)]
struct MySubStructure {
a: f32
}
#[derive(CanTween)]
struct MyStructure {
a: f64,
b: Point2<f64>,
c: f32,
d: [MySubStructure; N] // Array length matching is guaranteed by the type system
}
// Also works with unnamed structures
#[derive(CanTween)]
struct UnnamedStructure(MyStructure, f64);
依赖项
~565KB
~11K SLoC