核心就一个FSM(状态机),一个FSMState(状态)。
每个状态可以有一个父状态和无限个子状态。
具体实现可以参考下面代码
将附件的后缀该为.zip后,解压可获得到源码
require(“FSM”)
require(“FSMState”)
local fsm = FSM:New(“fsmName”)
local idleState = FSMState:New(“idle”)
local moveState = FSMState:New(“move”)
local attackState = FSMState:New(“attack”)
idleState:BindAction(nil, function(dt)
print("idle update " … tostring(dt))
end, function()
print(“idle leave”)
end)
moveState:BindAction(function()
print(“move enter”)
end, function(dt)
print("move update " … tostring(dt))
end)
attackState:BindAction(function()
print(“attack enter”)
end, function(dt)
print("attack update " … tostring(dt))
end)
fsm:AddState(idleState)
fsm:AddState(moveState)
fsm:AddState(attackState)
fsm:Begin(idleState)
local index = 0
while(true) do
fsm:OnUpdate(0.02)
index = index + 1
if index > 3 then
print("break")
break
end
end
fsm:SetState(attackState)
fsm:SetState(moveState)
fsm:GoBackState()