1. 程式人生 > >狀態機--狀態機3,關於戰鬥中兵種狀態的狀態的結束

狀態機--狀態機3,關於戰鬥中兵種狀態的狀態的結束

戰鬥中的角色有多種狀態,根據不同的事件切換到不同的狀態,進入一個狀態,

當然也會退出狀態,如冰凍狀態,戰鬥中的角色中了冰凍buff後進入冰凍狀態,

那麼當這個冰凍buff時間到了之後自然就失效了,角色要解除冰凍狀態,那麼

解除了冰凍狀態後要進入哪個狀態呢,這個具體看需求,一般情況下是進入到

待機狀態,通俗地說,當冰凍buff生效時呼叫onFrozen(),當冰凍buff失效時

呼叫onFrozenEnd(),程式碼如下:

local StateId = require("app.edition4.StateId")

local Soldier = class("Soldier")

function Soldier:ctor()
    self.iStateId = StateId.unKnown
end

--待機
function Soldier:onIdle()
    self.iStateId = StateId.idle
    print("切換到待機狀態")
end

--行走
function Soldier:onWalk()
    if self:isFrozen() then return end
    self.iStateId = StateId.walk
    print("切換到行走狀態")
end

--攻擊
function Soldier:onAttack()
    if self:isFrozen() then return end
    self.iStateId = StateId.attack
    print("切換到攻擊狀態")
end

--冰凍
function Soldier:onFrozen()
    if self:isFrozen() then return end
    self.iStateId = StateId.frozen
    print("切換到冰凍狀態")
end

--冰凍結束,預設切換為待機狀態
function Soldier:onFrozenEnd()
    print("冰凍狀態結束")
    self:onIdle()
end

function Soldier:isFrozen()
    return self.iStateId == StateId.frozen
end

return Soldier