在cocos2dx 3.x版本已經被棄用,改用EventDispatcher代替。
觀察者模式是MVC模式的一種,一個model可以對應很多個觀察者view,當model收到事件通知時,對應的view
馬上處理事件。比如在游戲中,網絡發送http,當有數據回來時,需要改變界面的一些狀態或者更新數據等等操作。
在Node節點中,有一個EventDispatcher* _eventDispatcher屬性,可以通過getEventDispatcher()方法獲取,
EventDispatcher類里面主要是通過一個vector存儲所有要監聽的事件,然后在接收信息時,遍歷所有要監聽的
消息,判斷消息類型進行毀掉。
以下是使用EventDispatcher的lua方法:
local layer = cc.Layer:create()--創建一個layer
self:addChild(layer)--添加到場景中
self._counter = 0
local function eventCustomListener1(event)--創建一個事件回調函數
self._counter = self._counter + 1
release_print(self._counter)
end
local listener1 = cc.EventListenerCustom:create("testEvent",eventCustomListener1)--創建一個監聽事件,第一個參數是事件的鍵值名(事件名)
第二個參數是回調函數。
local function eventCustomListener2(event)--創建第二個事件
release_print(event._myName)
end
local listener2 = cc.EventListenerCustom:create("testEvent",eventCustomListener2)
local eventDispatcher = layer:getEventDispatcher()--獲取節點的EventDispatcher
eventDispatcher:addEventListenerWithFixedPriority(listener1,1)--把兩個監聽事件添加到eventDispatcher,並且設置權重
eventDispatcher:addEventListenerWithFixedPriority(listener2,2)
使用eventDispatcher:dispatchEvent()響應所有對應事件名的事件
local event = cc.EventCustom:new("testEvent")
event._myName = "I'm HemJohn"
eventDispatcher:dispatchEvent(event)
調用三次dispatchEvent結果如下:
轉載請注明出處,from 博客園HemJohn