quick lua下自定義事件處理

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

相關文章
相關標籤/搜索