GDGeek使用概要
1855 ワード
FSM(有限状態機)
GDGeekのFSMは階層型ステートマシンを実現し、タスク(Task)と補間アニメーション(Tween)を統合して使いやすい.
各状態の実装関数は1つのStateを返さなければならない
FSM送受信メッセージ送信
タスクシステム(Task)
複数のアニメーションが同時に実行されている場合は、タスクを
GDGeekのFSMは階層型ステートマシンを実現し、タスク(Task)と補間アニメーション(Tween)を統合して使いやすい.
fsm_ = new FSM();
//
fsm_.addState("start", startState());
fsm_.addState("play", playState());
// play
fsm_.addState("input", inputState(),"play");
fsm_.addState("fall", fallState(), "play");
fsm_.addState("remove", removeState(), "play");
fsm_.addState("end", endState());
//
fsm_.init("play");
各状態の実装関数は1つのStateを返さなければならない
private State playState()
{
StateWithEventMap state = new StateWithEventMap();
state.onStart += delegate()//
{
view.play.gameObject.SetActive(true);
refreshView();
};
state.onOver += delegate()//
{
view.play.gameObject.SetActive(false);
};
return state;
}
FSM送受信メッセージ送信
fsm_.post(msg);
受信state.addAction(msg, delegate(FSMEvent evt) { return "fall";});
メッセージは状態で受信されるので、同じメッセージは異なる状態で異なる処理を行うことができる.コールバックの処理で次の状態に戻ります.タスクシステム(Task)
StateWithEventMap state = TaskState.Create(delegate()
{
TweenTask tt = new TweenTask(delegate //
{
return TweenLocalPosition.Begin(_tempSquare.gameObject, 1f, _targetSquare.transform.localPosition);
});
TaskManager.PushBack(tt, delegate
{
_tempSquare.hide();
refreshView();
});
return tt;
}, fsm_, "remove");//
複数のアニメーションが同時に実行されている場合は、タスクを
TaskSet
に挿入し、すべてのタスクを同時に実行し、すべてのタスクが完了した後に次のステータスに切り替えます.