cocos2d-x lua 实现状态机
cocos2d-x lua 实现状态机version: cocos2d-x 3.6 0.状态机状态机主要分为2大类:第一类,若输出只和状态有关而与输入无关,则称为Moore状态机;第二类,输出不仅和状态有关而且和输入有关系,则称为Mealy状态机。 1.应用场景例如一个跑酷游戏,角色有如下状态:跑动,滑行,起跳,下落,飞行等。每一个状态有持续时间,和该状态期间的处理逻辑,当前状态由用户输入和上一个状态确定。那么很容易想到角色的状态变化通过状态机来实现,非常的方便。 2.实现1) 各状态的处理每个状态的进入、退出和持续过程都有自己的逻辑,所以我们要为每一个状态实现它们自己的逻辑处理接口。
local Actor = class("Actor")
-- 1.run
function Actor:onEnterRun()
-- TODO 进入run状态时,进行该状态的初始化操作
end
function Actor:onUpdateRun(dtTime,curTime)
-- TODO (每一帧都会调用)在run状态过程中,进行的逻辑操作
--return 0.5
--return 1,nextState
end
function Actor:onExitRun()
-- TODO 退出run状态是,进行该状态的退出处理
end
-- 2.glide 3.jump 4.fall 5.fly
return Actor
2) 实现状态机各状态的逻辑实现后,那么就可以实现状态机。其实它就是一个与状态相关的函数回调表。 Actor.FUNC_ONENTER = "onEnter"
Actor.FUNC_UPDATE = "onUpdate"
Actor.FUNC_ONEXIT = "onExit"
function Actor:initStateMachine()
self.stateMachine = {}
self.stateMachine["RUN"] = {
Actor.FUNC_ONENTER = Actor.onEnterRun,Actor.FUNC_UPDATE = Actor.onUpdateRun,Actor.FUNC_ONEXIT = Actor.onExitRun
}
self.stateMachine["JUMP"] = {
Actor.FUNC_ONENTER = Actor.onEnterJump,Actor.FUNC_UPDATE = Actor.onUpdateJump,Actor.FUNC_ONEXIT = Actor.onExitJump
}
-- TODO other state ....
end
3) 使用状态机在游戏过程中,Actor类会维护一个自己当前状态的变量
self.stateMachine[self.curState].FUNC_UPDATE(self,dtTime,curTime)
self.stateMachine[self.curState].FUNC_ONEXIT(self)
self.stateMachine[nextState].FUNC_ONENTER(self)
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |