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游戏开发

Download history 5394/week @ 2024-03-14 6408/week @ 2024-03-21 5869/week @ 2024-03-28 5511/week @ 2024-04-04 5350/week @ 2024-04-11 5576/week @ 2024-04-18 5288/week @ 2024-04-25 5875/week @ 2024-05-02 5656/week @ 2024-05-09 5397/week @ 2024-05-16 5366/week @ 2024-05-23 5258/week @ 2024-05-30 5276/week @ 2024-06-06 5463/week @ 2024-06-13 4134/week @ 2024-06-20 1726/week @ 2024-06-27

17,462 每月下载量
9 库中使用 (8 个直接使用)

MIT 许可证

43KB
882

keyframe

一个用于 Rust 的简单动画库

Crate Downloads Documentation License

功能

  • 包含多种缓动函数,包括用户自定义的 Bézier 曲线(如 CSS cubic-bezier)和可关键帧化的曲线
  • 动画序列(如 CSS @keyframes
  • 支持 2D/3D/4D 的mint 集成(点、矩形、颜色等)

用法

使用 keyframe::ease(function, from, to, time) 函数在两个值之间进行缓动。 fromto 可以是任何实现了 CanTween 的类型,如 f64mint::Vector2,而 time 需要是一个介于零和一之间的浮点值。 function 指定了 fromto 之间的转换,并且是任何实现了 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