Quick-Cocos2d-x中的事件机制在官方的文档中已经讲解得很清楚了,查看这里。web
这些方法能处理绝大多数的事件,但若是要实现自定义的事件(例如咱们本身实现一个类,对该类添加自定义的事件处理)就须要对类进行扩展了。函数
下面讲讲如何使用自定义(扩展)的事件机制。测试
首先认识一下类EventProxy,就是这个类实现了自定义的消息处理ui
该类有四个函数,分别是:url
addEventListenerspa
removeEventListenercode
removeAllEventListenersForEventcomponent
removeAllEventListenersorm
根据名字就能知道这几个函数的做用。
对象
下面以咱们定义一个继承自Node的类来了解自定义事件的处理方法
定义类EXNode以下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
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
|
最重要的是这句
1
|
cc.GameObject.extend(self):addComponent(
"components.behavior.EventProtocol"
):exportMethods()
|
该句为EXNode类添加了扩展的事件处理方法,如今咱们能够使用EventProxy中的函数了,经过这些函数咱们能够让EXNode接收到自定义的消息而后进行处理。
在该类中咱们建立一个按钮,用按钮来模拟咱们游戏中的某些操做,当按钮按下的时候发送消息给其父节点EXNode,咱们将该自定义的消息名字设置为MY_NEWS。
咱们在Scene中使用EXNode
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
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对象,
1
|
self.exNode:addEventListener(
"MY_NEWS"
, handler(self, self.onMynews));
|
让exNode对象监听自定义的事件,从这句能够看到咱们监听的事件信息名称为MY_NEWS(即EXNode中按钮点击后发送的自定义消息),回调函数为EventScene的onMynews函数。
测试程序,点击按钮模拟游戏操做,在EXNode内部分发出名称为MY_NEWS的消息,以后exNode对象就可以接收到消息,而后调用回调函数onMynews进行处理了。