GDGeek使用总结

FSM(有限状态机)

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");

每个状态的实现函数必须返回一个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,它会同时执行所有任务,并在所有任务完成后切换到下一个状态。

你可能感兴趣的:(GDGeek使用总结)