cocos2dx觀察者模式EventListenerCustom的使用(代替NotificationCenter)


在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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM