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進行處理了。