关于回合制,状态机遇到的问题

因为对状态机不熟,没有采用状态机模式。

暂时游戏进程播放方式。

每个回合
根据时序关系,有很多个播放序列。
setTimeOut 定义 延迟多少,处理。【只是为了解释流程】

攻击过程 (各种技能播放【技能前,技能后,技能中,起始动画,结束动画】,人物放缩,等等)
setTimeOut(attack_do,time1),
setTimeOut(attack_do2,time2),
setTimeOut(attack_do3,time3),

setTimeOut(attack_doN,timeN)

移动过程 (移动过程中伴随很多处理,移动特效,人物放缩等等)
setTimeOut(move_do,time1),
setTimeOut(move_do2,time2),

setTimeOut(move_doN,timeN)

其他过程N

…N 个

所以一回合,要组织 N个过程 * n个处理的 。

综合表现就是
一个回合
for i , Nn do -----------------------------------建立一个 Nn的 循环组织一些列的延迟,
performWithDelay(function() end , timeN)
end

这样做出来的感觉 怎么说呢, 还是能播,就是没信心确保。

所以询问 廖大,状态机实现。 一定要喷我的实现方式, 让我有足够理由接触 状态机~~~~~

一回合
待机 – 移动 – 攻击 – 移动 – 待机

受伤
闪避   
格挡

以下是 我的一个 回合 序列播放 代码:

–播放动画
function FightActionSegment:run()
self.total_duration_consume = 0
local function runAction(progress,actionSprites)
if not actionSprites then return 0 end

    local max_duration_consume = 0
    for i=1,#actionSprites do
        local actionSprite = actionSprites*
        actionSprite:run(progress)
        local duration_consume = actionSprite:getDurationConsume() + actionSprite:getDelay()
     
        --logger("---------------",duration_consume)
        if max_duration_consume < duration_consume then
            max_duration_consume = duration_consume
        end
    end
    self.total_duration_consume = self.total_duration_consume + max_duration_consume
    return max_duration_consume
end

local progress = 0

progress = progress + runAction(progress,self._appear)
progress = progress + runAction(progress,self._story)
progress = progress + runAction(progress,self._prelude)
progress = progress + runAction(progress,self._skillReady)
progress = progress + runAction(progress,self._skillBuildUp)
progress = progress + runAction(progress,self._preMove)
progress = progress + runAction(progress,self._move)
progress = progress + runAction(progress,self._preAct)
progress = progress + runAction(progress,self._atk)
progress = progress + runAction(progress,self._atkProgress)
progress = progress + runAction(progress,self._def)
progress = progress + runAction(progress,self._def_result)
progress = progress + runAction(progress,self._change_hp)
progress = progress + runAction(progress,self._back)
progress = progress + runAction(progress,self._endAct)
progress = progress + runAction(progress,self._counterattack)
progress = progress + runAction(progress,self._be_counterattacked)
progress = progress + runAction(progress,self._be_counterattacked_change_hp)
progress = progress + runAction(progress,self._after_atk)
progress = progress + runAction(progress,self._before_dead)
progress = progress + runAction(progress,self._dead)
progress = progress + runAction(progress,self._after_dead)
progress = progress + runAction(progress,self._after_all_dead)

--动画播放完成后的回调
if self._onActionEndCallback then
    PerformWithDelay(nil,self.total_duration_consume, self._onActionEndCallback)
end

end*

这个要你多看几遍 quick 状态机的例子。自己理解 然后举一反三。