美文网首页
GDGeek使用总结

GDGeek使用总结

作者: Nasume | 来源:发表于2016-08-30 14:11 被阅读0次

    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使用总结

          本文链接:https://www.haomeiwen.com/subject/ydwfettx.html