quick组件模块的使用以及简单案例

来源:互联网 发布:有什么手机短信软件 编辑:程序博客网 时间:2024/05/05 22:48

案例一 通知中心

在quick 中 通知中心的功能是通过组件来实现的
我们要想实现观察者的监听事件的功能,就需要添加一个组建,并导入相关方法

    cc.GameObject.extend(self):addComponent("components.behavior.EventProtocol"):exportMethods()

cocos组建模块在 framework.cc.components.hehacior中

    addEventListener,    dispatchEvent,    removeEventListener,    removeEventListenersByTag,    removeEventListenersByEvent,    removeAllEventListenersForEvent,    removeAllEventListeners,    hasEventListener",    dumpAllEventListeners,

添加监听者 function EventProtocol:addEventListener(eventName, listener, tag)
删除监听者 function EventProtocol:removeEventListener(handleToRemove)
删除所有监听者 function EventProtocol:removeAllEventListeners()
发送监听 function EventProtocol:dispatchEvent(event)
代码示例

-- [[EXNode.lua ]]local EXNode = class("EXNode", function (  )    return display.newNode()end)function EXNode:ctor(  )    -- 添加一个通知的组建,并导入相关方法    cc.GameObject.extend(self):addComponent("components.behavior.EventProtocol"):exportMethods()    --添加一个按钮,并在点击按钮时发送一个事件 或者消息    cc.ui.UIPushButton.new({normal ="caozuodian1.png"})    :align(display.CENTER, display.cx, display.cy)    :onButtonRelease(function (  )        print("点击了子节点")        self:dispatchEvent({name = "myEvent"})    end)    :addTo(self)    :pos(display.cx, display.cy)endfunction EXNode:onEnter( )    self:setTouchEnabled(true)endfunction EXNode:onExit(  )    self:removeAllEventListeners()endreturn EXNode-- 主场景的使用 self.exNode = EXNode.new()    self.exNode:addEventListener("myEvent", handler(self, self.onMyNews))    self:addChild(self.exNode)-- 添加一个监听者,并在出现相应事件时,执行onMyNews的方法function MainScene:onMyNews(  )    print("有人点击了 exNode")end

案例二、 状态机的使用

什么是状态机:
1、状态机是通过状态变量来描述不同状态 2、状态机变量是互斥的 3、状态机的分割是状态机好坏的标准
状态机的好处:
1、降低整个系统的复杂性 2、容易扩展
3、容易维护
如何实现状态机:
1、通过不同的状态分割逻辑
2、通过面向对象思想来扩展和分割逻辑

Quick状态机的源码位于framework/cc/components/ behavior/StateMachine下

---如果让一个类拥有状态机,主要有两步: 1.创建状态机对象 2.初始化状态机,主要包括事件和回调函数local Player = class("Player", function (  )    return display.newSprite("caozuodian1.png")end) function Player:ctor(  )    self:addStateMachine()endfunction Player:doEvent( event )    if self.fsm:canDoEvent(event) then        self.fsm:doEvent(event)    endendfunction Player:addStateMachine( )    self.fsm ={}    cc.GameObject.extend(self.fsm):addComponent("components.behavior.StateMachine"):exportMethods()    self.fsm:setupState({        initial = "idle",        events = {        {name ="move",from ={"idle","jump"},to="walk"},        {name ="attack",from ={"idle","walk"},to="jump"},        {name ="normal",from ={"walk","jump"},to="idle"},        },        callbacks = {            onenterwalk = function (  )            print("move")        end,        onenterjump = function (  )            print("jump")        end,        onenteridle = function  (  )            print("normal")        end        },    })end``return Player-- 主场景local MainScene = class("MainScene", function()    return display.newScene("MainScene")end)EXNode = require("app.scenes.EXNode")function MainScene:ctor()    cc.ui.UILabel.new({            UILabelType = 2, text = "Hello, World", size = 64})        :align(display.CENTER, display.cx, display.cy)        :addTo(self)    self.exNode = EXNode.new()    self.exNode:addEventListener("myEvent", handler(self, self.onMyNews))    self:addChild(self.exNode)    local bt1 = cc.ui.UIPushButton.new({normal ="caozuodian1.png"})    bt1:onButtonClicked(function (  )        player:doEvent("normal")    end)    bt1:pos(200, 60)    self:addChild(bt1)    Player = require("app.scenes.Player").new()    player:setPosition(cc.p(100,150))    player:addTo(self)    local bt2 = cc.ui.UIPushButton.new({normal ="caozuodian1.png"})    bt2:onButtonClicked(function (  )        player:doEvent("move")    end)    bt2:pos(200, 180)    self:addChild(bt2)    local bt3 = cc.ui.UIPushButton.new({normal ="caozuodian1.png"})    bt3:onButtonClicked(function (  )        player:doEvent("attack")    end)    bt3:pos(200, 300)    self:addChild(bt3)endfunction MainScene:onEnter()endfunction MainScene:onExit()endfunction MainScene:onMyNews(  )    print("有人点击了 exNode")endreturn MainScene
0 0
原创粉丝点击