2 个版本
0.1.1 | 2023 年 6 月 15 日 |
---|---|
0.1.0 | 2023 年 6 月 15 日 |
#641 在 GUI
每月 237 次下载
130KB
1.5K SLoC
Mina
一个简单、表达性强、框架无关的 Rust 动画库。
特性
- 可以动画化任何标准
struct
的属性。 - 简洁,类似于 CSS 动画 的语法,用于帧和计时。
- 基于状态的动画器,类似于 CSS 过渡。
- 包含 缓动,无需数学计算。
- 无 GUI 依赖 - 您编写事件循环并决定属性的含义。
目标
- 简单:创建和实验动画应该是 简单 的。
- 平滑:动画应该很好地融合,直观且不会显得生硬。
- 可适应:能够开箱即用地动画化简单的属性,并通过少量调整来动画化更复杂的属性。
- 多用途:可以与任何具有计时器或事件循环的应用程序结合使用。
时间轴示例
注意:这是一个示例,本页上的所有其他示例仅包括创建时间轴和/或动画器的代码。完整的示例始终可在 示例目录 中找到。
#[derive(Animate)]
struct Shape {
size: f32,
#[animate] x: f32,
#[animate] y: f32,
}
impl Shape {
pub fn new(size: f32) -> Self {
Shape { size, x: 0.0, y: 0.0 }
}
}
let timeline = timeline!(Shape 5s infinite Easing::OutCubic
from { x: -150.0, y: 60.0 }
25% { x: 150.0, y: 60.0 }
50% { x: 150.0, y: -60.0 }
75% { x: -150.0, y: -60.0 }
to { x: -150.0, y: 60.0 });
动画器示例
#[derive(Animate, Clone, Debug, Default)]
struct Effects {
background_alpha: f32,
emission_alpha: f32,
emission_scale: f32,
}
const EFFECT_SCALE: f32 = 2.0;
let animator = animator!(Effects {
default(Interaction::None, {
background_alpha: 0.5,
emission_alpha: 0.25,
emission_scale: 0.85
}),
Interaction::None => [
0.5s Easing::OutCubic to { background_alpha: 0.5 },
2s Easing::OutQuint infinite
from { emission_alpha: 0.0, emission_scale: 0.0 }
2% { emission_alpha: 0.15, emission_scale: 0.0 }
5% { emission_scale: 0.85 } Easing::InOutCirc
75% { emission_alpha: 0.0 }
100% { emission_scale: EFFECT_SCALE },
],
Interaction::Over => 0.5s Easing::OutCubic to {
background_alpha: 0.8,
emission_alpha: 0.0,
emission_scale: 0.85,
},
Interaction::Down => [
0.5s Easing::OutCubic to {
background_alpha: 1.0,
emission_alpha: 0.0,
emission_scale: 0.85,
},
3s Easing::OutExpo
1% { emission_scale: 1.05 }
to { emission_alpha: 0.1, emission_scale: 1.5 }
]
});
路线图
- 具有构建器式语法的独立时间轴
- 基于状态的动画器
- 使用 proc macros 的类似 CSS 的语法
- 修复宏语法的松散项(每关键帧缓动、持续时间/延迟标识等)
- 为插件式集成创建 GUI 特定子 crate
- 扩展示例/集成 crate,以包括更多 GUI 库
- 从
enum-map
依赖中解耦 - 内置 palette 支持(用于颜色插值)
更多示例
进度指示器
Bevy 形状和精灵
画布示例(代码即将推出!)
依赖关系
~1.6–2.2MB
~50K SLoC