【quick-cocos2d-x】自定义事件

http://cn.cocos2d-x.org/tutorial/show?id=1697

quick中的事件机制在官方的文档中已经讲解得很清楚了 查看这里
这些方法能处理绝大多数的事件,但如果要实现自定义的事件(例如我们自己实现一个类,对该类添加自定义的事件处理)就需要对类进行扩展了。

下面讲讲如何使用自定义(扩展)的事件机制。

首先认识一下类EventProxy,就是这个类实现了自定义的消息处理
该类有四个函数,分别是

addEventListener
removeEventListener
removeAllEventListenersForEvent
removeAllEventListeners

根据名字就能知道这几个函数的作用

下面以我们定义一个继承自Node的类来了解自定义事件的处理方法
定义类EXNode如下

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 = "button/button_normal.png",pressed = "button/button_selected.png"})
:align(display.CENTER,display.cx,display.cy)
:onButtonClicked(function()
self:getChildEvent()
end)
:addTo(self)
end

function EXNode:getChildEvent()
self:dispatchEvent({name = "MY_NEWS"})
end

function EXNode:onEnter()
self:setTouchEnabled(true)
end

function EXNode:onExit()
self:removeAllEventListeners()
end

return EXNode

最重要的是这句cc.GameObject.extend(self):addComponent("components.behavior.EventProtocol"):exportMethods()
该句为EXNode类添加了扩展的事件处理方法,现在我们可以使用EventProxy中的函数了,通过这些函数我们可以让EXNode接收到自定义的消息然后进行处理
在该类中我们创建一个按钮,用按钮来模拟我们游戏中的某些操作,当按钮按下的时候发送消息给其父节点EXNode,我们将该自定义的消息名字设置为MY_NEWS

我们在Scene中使用EXNode

local EXNode = import("..class.EXNode")

local EventScene = class("EventScene",function()
return display.newScene("EventScene")
end)

function EventScene:ctor()
self.exNode = EXNode.new()
self.exNode:addEventListener("MY_NEWS",handler(self,self.onMynews))
self:addChild(self.exNode)
end

function EventScene:onMynews()
printLog("INFO","父Node知道了子Node发送过来的消息")
end

function EventScene:onEnter()
end

function EventScene:onExit()
end

return EventScene


在EventScene中创建一个EXNode对象,
self.exNode:addEventListener("MY_NEWS",self.onMynews))让exNode对象监听自定义的事件,
从这句可以看到我们监听的事件信息名称为MY_NEWS(即EXNode中按钮点击后发送的自定义消息),回调函数为EventScene的onMynews函数

测试程序,点击按钮模拟游戏操作,在EXNode内部分发出名称为MY_NEWS的消息,之后exNode对象就能够接收到消息,然后调用回调函数onMynews进行处理了。

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...