quick 状态机StateMachine

function Player:addStateMachine()
    self.fsm_ = {}
    cc.GameObject.extend(self.fsm_)
    :addComponent("components.behavior.StateMachine")
    :exportMethods()

    self.fsm_:setupState({
        -- 初始状态
        initial = "idle",

        -- 事件和状态转换
        events = {
            -- t1:clickScreen; t2:clickEnemy; t3:beKilled; t4:stop
            {name = "clickScreen", from = {"idle", "attack"},   to = "walk" },
            {name = "clickEnemy",  from = {"idle", "walk"},  to = "attack"},
            {name = "beKilled", from = {"idle", "walk", "attack", "hit"},  to = "dead"},
            {name = "beHit", from = {"idle", "walk", "attack"}, to = "hit"},
            {name = "stop", from = {"walk", "attack", "hit"}, to = "idle"},
        },

        -- 状态转变后的回调
        callbacks = {
            onidle = function (event) self:idle() end,
            onattack = function (event) self:attackEnemy() end,
            onhit = function (event) self:hit() end,
            ondead = function (event) self:dead() end
        },
    })

end

 那我发一个clickScene的事件,它判断如果是idle attack状态的话就执行walk状态 跟if else一样 只是系统帮你写了if else了

用事件来驱动的状态迁移

 

时间: 2024-11-12 00:26:50

quick 状态机StateMachine的相关文章

quick cocos2d-x StateMachine 初体验

实现游戏中人物的几个状态转化,分别是:站立,行走,跳跃 三个状态. 状态转化图: 基本按照quick官方的sample实现了.现在贴下自己的代码: 1 local StateMachineScene = class("StateMachineScene", function() 2 return display.newScene("StateMachineScene") 3 end) 4 5 function StateMachineScene:ctor() 6 s

quick StateMachine 状态机的使用

quick 的状态机 真是使用简单,功能强大,记录一下使用方式便于以后使用 1:创建一个状态机StateMachine (1) self.fsm_ = StateMachine.new() (2)self:addComponent("component.behavior.StateMachine") self.fsm_ = self:getComponent("component.behavior.StateMachine") 2:setupState self.f

Quick Cocos2dx MVC初步

今天看到了自己之前两年前写的一个地图编辑器, 写了不到一半就放弃了, 但是还是github上的小伙伴fork了, 真的感觉对不起那位伙计, 同时也鄙视一下一直以来懒得要死的自己, 希望这个demo不要太监了,为了自己,也为了家人. 吐槽完毕,正题来了. 昨晚回家难得写了几行代码,真的是只有几行,每天上午都在游戏中度过,游戏公司,你懂的. 下午又开始继续Quick-x的编码了. 上次把官方的sample/mvc的代码照着敲了一边,顺便入门了一下状态机,关于quick状态机,可以参考以下的帖子: h

mina statemachine解读(一)

  statemachine(状态机)在维护多状态数据时有非常好的作用,现在github上star排名最前的是squirrel-foundation以及spring-statemachine,而mina的statemachine好像并没有对外提供,多用于mina的高级特性里面. 了解了下spring-statemachine,提供特别完善的扩展方式,interceptor,listener,甚至支持分布式,但是上手使用还是有一定的难度,代码也比较复杂,状态机的实例比较重.没有看到较好的现实应用实

__《MicroZus 开发平台参考教程》

目录 目录 1 Zynq-7000 系列芯片简介 3 Vivado 全流程概览 - LED 流水灯( PL) Main Code Analysis 4 硬件环境的调优 - 按键检测( PL) Main Code Analysis Summary Verify 5 和片外芯片打交道 - IIC 读写 EEPROM( PL) Main Code Analysis Summary 知识点 关于<=符号 阻塞赋值和非阻塞赋值 always语句详解 连续赋值和过程赋值 数值表示 case语句 赋值 Ver

Quick StateMachine状态机

状态机在quick中是一个亮点,如果我们做一款RPG游戏,一个角色一般会拥有idle,attack,walk,run,death这些状态,如果游戏角色的状态采用分支条件判断的话,会造成非常庞大而难以维护,但一旦使用了状态机这种模式,就会显得简单方便. 对于quick中的状态机是如何实现的咱们先不去了解,首先看看如何去使用它. 总结起来,如果让一个类拥有状态机,主要有两步: 1.创建状态机对象 2.初始化状态机,主要包括事件和回调函数 1.创建状态机组件 self.fsm = {} cc.Game

quick-cocos2d-x游戏开发【14】——StateMachine状态机

状态机在quick中是一个亮点,如果我们做一款RPG游戏,一个角色一般会拥有idle,attack,walk,run,death这些状态,如果游戏角色的状态采用分支条件判断的话,会造成非常庞大而难以维护,但一旦使用了状态机这种模式,就会显得简单方便. 对于quick中的状态机是如何实现的咱们先不去了解,首先看看如何去使用它. 总结起来,如果让一个类拥有状态机,主要有两步: 1.创建状态机对象 2.初始化状态机,主要包括事件和回调函数 1.创建状态机组件 self.fsm = {} cc.Game

QT 状态机详解 statemachine (转)

状态机顾名思义,应该有不同的状态在切换.上面状态机图中,我们提供了两种状态state1和state2.而状态的区分是由状态的属性来描述的,比如p1,p2…等等.从一个状态到另一个状态的转化,必须由触发条件来完成,上图state1到state2的状态转换由transition1来表示,state2到state1的状态转换由transition2来表示.如果希望在状态转换过程中有动画来展示,那么可以在transition1和transition2中加入动画效果animation1和animation

quick mvc 结合状态机

quick中mvc结合状态机在某一对象有多种状态且经常需要转换的时候,使用状态机实现非常方便.在model层给对象添加状态机组件,然后在触发某种状态时(onstart,onready,onrun-)分发事件,然后再view层监听此事件,当model处于某种状态时,触发相应的事件,view层监听到事件后做出不同的动作.关于mvc.状态机的使用可以查看sample下的demo