Quick-cocos2d-x的MVC架构之有限状态机研究

所谓状态机机制,就是指
1)按照一定规则设置好所有状态
2)按照一定规则设置好所有操作
3)按照一定规则设置好对象在某种状态下进行某种操作后会变为另外哪种状态
4)按照一定规则定义好对象在进入某种操作前、中、后和某种状态进入前、中、离开时的处理函数
这样当对对象执行某种操作时,该对象的状态就会自动变化并调用进入前、进入中、进入后的函数


例子:假设类A有3种状态state1、state2、state3
2种操作process1、 process2
对象在state1下,执行process1,状态会变为state2
state2下,执行process1,状态会变为state3
state1下,执行process2,状态会变为state3
其余状态下,执行操作,状态不会发生改变


代码如下
--定义状态机变量
self.fsm_ = {}
cc.GameObject.extend(self.fsm_):
addComponent("components.behavior.StateMachine"):exportMethods()


--定义在某种状态下执行各种操作会变为哪种状态
myEvents = {
        {name = "process1", from="state1", to="state2"},
        {name = "process1", from="state2", to="state3"},
        {name = "process2", from="state1", to="state3"},
    }

--定义各种情况下调用的函数
myCallbacks = {
        onprocess1 = function(event) print("do process1") end,
        onprocess2 = function(event) print("do process2") end,
        onstate1 = function(event) print("in state1") end,
        onstate2 = function(event) print("in state2") end,
        onstate3 = function(event) print("in state3") end,
        onleavestate1 = function(event) print("leave state1") end, 
        onleavestate2 = function(event) print("leave state2") end, 
        onleavestate3 = function(event) print("leave state3") end, 
        onchangestate = function(event) print("[FSM] CHANGED STATE: " .. event.from .. " to " .. event.to) end,
    }

--设置,initial是初始状态
self.fsm_:setupState({
        initial = "state1",
        events = myEvents,
        callbacks = myCallbacks
    })

--改变状态,要先判断该状态下是否可以执行某种操作,或者说是否设置过
if self.fsm_:canDoEvent("process1") then

self.fsm_:doEvent("process1")

print("current state is "..self.fsm_:getState())

else
print("Cannt do process1")
end


输出为
[LUA-print] leave state1
[LUA-print] in state2
[LUA-print] [FSM] CHANGED STATE: state1 to state2

[LUA-print] do process1

[LUA-print] current state is state2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值