4个版本 (2个破坏性更新)
0.3.0 | 2023年1月17日 |
---|---|
0.2.1 | 2023年1月16日 |
0.2.0 | 2023年1月16日 |
0.1.0 | 2023年1月14日 |
#1819 in 游戏开发
34KB
289 行
rsanim
管理精灵动画的基本状态机。
示例用法
use rsanim::*;
use std::collections::HashMap;
#[derive(Clone, Eq, PartialEq, Hash, Debug)]
enum Animation {
Idle,
Run,
}
#[derive(Clone, Debug, PartialEq)]
struct Params {
pub speed: f32,
}
let mut state_machine = StateMachine::new(
Animation::Idle,
HashMap::from([
(
Animation::Idle,
State {
duration: 0.5,
repeat: true,
},
),
(
Animation::Run,
State {
duration: 1.0,
repeat: true,
},
),
]),
vec![
Transition {
start_state: TransitionStartState::Node(Animation::Idle),
end_state: TransitionEndState::Node(Animation::Run),
trigger: TransitionTrigger::Condition(Box::new(|x: &Params| x.speed > 0.0)),
},
Transition {
start_state: TransitionStartState::Node(Animation::Run),
end_state: TransitionEndState::Node(Animation::Idle),
trigger: TransitionTrigger::Condition(Box::new(|x: &Params| x.speed <= 0.0)),
},
],
Params { speed: 0.0 },
)
.unwrap();
let animator = Animator::new(
state_machine,
HashMap::from([
(
Animation::Idle,
vec![
Frame {
value: 0,
progress: 0.00,
},
Frame {
value: 1,
progress: 0.33,
},
Frame {
value: 2,
progress: 0.67,
},
],
),
(
Animation::Run,
vec![
Frame {
value: 0,
progress: 0.00,
},
Frame {
value: 1,
progress: 0.33,
},
Frame {
value: 2,
progress: 0.67,
},
],
),
]),
)
.unwrap();
更新状态机的已过时间
let delta_time = 0.1;
animator.update(delta_time);
更新状态机的参数,这些参数用于确定条件转换
animator.update_parameters(&|x| {
x.speed = 1.0;
});
Bevy
见 examples/bevy.rs
。