quick-cocos2d-x 学习系列之十五 状态机_第1页
quick-cocos2d-x 学习系列之十五 状态机_第2页
quick-cocos2d-x 学习系列之十五 状态机_第3页
quick-cocos2d-x 学习系列之十五 状态机_第4页
quick-cocos2d-x 学习系列之十五 状态机_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

quick-cocos2d-x学习系列之十五状态机代码--createFiniteStateMachineself.fsm_={}cc.GameObject.extend(self.fsm_):addComponent("components.behavior.StateMachine"):exportMethods()self.fsm_:setupState({events={{name="start",from="none",to="green"},{name="warn",from="green",to="yellow"},{name="panic",from="green",to="red"},{name="panic",from="yellow",to="red"},{name="calm",from="red",to="yellow"},{name="clear",from="red",to="green"},{name="clear",from="yellow",to="green"},},callbacks={onbeforestart=function(event)self:log("[FSM]STARTINGUP")end,onstart=function(event)self:log("[FSM]READY")end,onbeforewarn=function(event)self:log("[FSM]STARTEVENT:warn!",true)end,onbeforepanic=function(event)self:log("[FSM]STARTEVENT:panic!",true)end,onbeforecalm=function(event)self:log("[FSM]STARTEVENT:calm!",true)end,onbeforeclear=function(event)self:log("[FSM]STARTEVENT:clear!",true)end,onwarn=function(event)self:log("[FSM]FINISHEVENT:warn!")end,onpanic=function(event)self:log("[FSM]FINISHEVENT:panic!")end,oncalm=function(event)self:log("[FSM]FINISHEVENT:calm!")end,onclear=function(event)self:log("[FSM]FINISHEVENT::onButtonClicked(function()ifself.fsm_:canDoEvent("warn")thenself.fsm_:doEvent("warn")endend):align(display.CENTER,display.cx+50,display.top-540):addTo(self)self.panicButton_=cc.ui.UIPushButton.new():setButtonLabel(cc.ui.UILabel.new({text="panic",size=32,color=display.COLOR_BLACK})):onButtonClicked(function()ifself.fsm_:canDoEvent("panic")thenself.fsm_:doEvent("panic")endend):align(display.CENTER,display.cx+150,display.top-540):addTo(self)--debugself.logCount_=0程序开始时候设置状态为green.函数log打印信息,根据打印状态变化图片。函数pengding打印状态信息,并设置LABEL字符串。解释创建有限状态机--createFiniteStateMachineself.fsm_={}cc.GameObject.extend(self.fsm_):addComponent("components.behavior.StateMachine"):exportMethods()设置有限状态机回调函数self.fsm_:setupState({events={{name="start",from="none",to="green"},{name="warn",from="green",to="yellow"},{name="panic",from="green",to="red"},{name="panic",from="yellow",to="red"},{name="calm",from="red",to="yellow"},{name="clear",from="red",to="green"},{name="clear",from="yellow",to="green"},},callbacks={onbeforestart=function(event)self:log("[FSM]STARTINGUP")end,onstart=function(event)self:log("[FSM]READY")end,onbeforewarn=function(event)self:log("[FSM]STARTEVENT:warn!",true)end,onbeforepanic=function(event)self:log("[FSM]STARTEVENT:panic!",true)end,onbeforecalm=function(event)self:log("[FSM]STARTEVENT:calm!",true)end,onbeforeclear=function(event)self:log("[FSM]STARTEVENT:clear!",true)end,onwarn=function(event)self:log("[FSM]FINISHEVENT:warn!")end,onpanic=function(event)self:log("[FSM]FINISHEVENT:panic!")end,oncalm=function(event)self:log("[FSM]FINISHEVENT:calm!")end,onclear=function(event)self:log("[FSM]FINISHEVENT:clear!")end,onleavegreen=function(event)self:log("[FSM]LEAVESTATE:green")end,onleaveyellow=function(event)self:log("[FSM]LEAVESTATE:yellow")end,onleavered=function(event)self:log("[FSM]LEAVESTATE:red")self:pending(event,3)self:performWithDelay(function()self:pending(event,2)self:performWithDelay(function()self:pending(event,1)self:performWithDelay(function()self.pendingLabel_:setString("")event.transition()end,1)end,1)end,1)return"async"end,ongreen=function(event)self:log("[FSM]ENTERSTATE:green")end,onyellow=function(event)self:log("[FSM]ENTERSTATE:yellow")end,onred=function(event)self:log("[FSM]ENTERSTATE:red")end,onchangestate=function(event)self:log("[FSM]CHANGEDSTATE:"..event.from.."to"..event.to)end,},})创建4个Button分别是:clear,calm,warn,panic。如clear按钮self.clearButton_=cc.ui.UIPushButton.new():setButtonLabel(cc.ui.UILabel.new({text="clear",size=32,color=display.COLOR_BLACK})):onButtonClicked(function()ifself.fsm_:canDoEvent("clear")thenself.fsm_:doEvent("clear")endend):align(display.CENTER,display.cx-150,display.top-540):addTo(self)是否可以调用clear时间,如果可以则调用。其他3个按钮类似。点击panic按钮后先调用函数onbeforepanic输出[FSM]STARTEVENT:panic!然后调用onleavegreen=function(event)self:log("[FSM]LEA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论