cocos2d-x lua 实现状态机

cocos2d-x lua 实现状态机,第1张

概述cocos2d-x lua 实现状态机 version: cocos2d-x 3.6 0.状态机 状态机主要分为2大类:第一类,若输出只和状态有关而与输入无关,则称为Moore状态机;第二类,输出不仅和状态有关而且和输入有关系,则称为Mealy状态机。 1.应用场景 例如一个跑酷游戏,角色有如下状态:跑动,滑行,起跳,下落,飞行等。每一个状态有持续时间,和该状态期间的处理逻辑,当前状态由用户输入和 cocos2d-x lua 实现状态机

version: cocos2d-x 3.6

0.状态机

状态机主要分为2大类:第一类,若输出只和状态有关而与输入无关,则称为Moore状态机;第二类,输出不仅和状态有关而且和输入有关系,则称为Mealy状态机。

1.应用场景

例如一个跑酷游戏,角色有如下状态:跑动,滑行,起跳,下落,飞行等。每一个状态有持续时间,和该状态期间的处理逻辑,当前状态由用户输入和上一个状态确定。那么很容易想到角色的状态变化通过状态机来实现,非常的方便。

2.实现 1) 各状态的处理

每个状态的进入、退出和持续过程都有自己的逻辑,所以我们要为每一个状态实现它们自己的逻辑处理接口。

状态函数的参数根据自己项目的需求来设计

各状态的update返回当前状态的完成度百分比,当返回100%说明该状态结束,需要切换到下一状态。如:下落过程中,onUpdateFall返回100%说明着陆了,需要切换到跑状态(下一个状态也可通过update返回)。

local Actor = class("Actor")-- 1.runfunction Actor:onEnterRun()    -- Todo 进入run状态时,进行该状态的初始化 *** 作endfunction Actor:onUpdateRun(dtTime,curTime)    -- Todo (每一帧都会调用)在run状态过程中,进行的逻辑 *** 作    --return 0.5    --return 1,nextStateendfunction Actor:onExitRun()    -- Todo 退出run状态是,进行该状态的退出处理end-- 2.glIDe 3.jump 4.fall 5.flyreturn 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.curState

在游戏过程的每一帧,调用update以执行当前状态的逻辑处理。
self.stateMachine[self.curState].FUNC_UPDATE(self,dtTime,curTime)
当用户输入、或当前状态结束时(即update返回100%,那么将切换状态)
self.stateMachine[self.curState].FUNC_ONEXIT(self)self.stateMachine[nextState].FUNC_ONENTER(self)
总结

以上是内存溢出为你收集整理的cocos2d-x lua 实现状态机全部内容,希望文章能够帮你解决cocos2d-x lua 实现状态机所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1059670.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存