cocos2d-x lua 使用自定義消息EventCustom


cocos2d-x lua 使用自定義消息EventCustom

version: cocos2d-x 3.6

1.發送消息

-- post message
-- event將會被傳遞給消息接收函數,所以所有需要傳遞的數據都可放到event中
local event = cc.EventCustom:new("MSG_TEST")
event._usedata = {["state"]=self.curState, ["actionId"]=self.actionId}
cc.Director:getInstance():getEventDispatcher():dispatchEvent(event)

2.監聽與接收

  • 監聽消息需要調用self:enableNodeEvents()使消息接收有效
-- listener
local ActorSprite = class("ActorSprite", cc.Node)

function ActorSprite:initEventListener()
	self:enableNodeEvents()  -- cc.Node
	self.eventListeners = {} -- user to delete when dtor
	
	local listener = cc.EventListenerCustom:create(MSG_TEST, handler(self, self.onChangeState))
    local eventDispatcher = self:getEventDispatcher()
    eventDispatcher:addEventListenerWithFixedPriority(listener, 1)
    table.insert(self.eventListeners, listener)	
end

function DogSprite:onChangeState(event)
    local dogId = event._usedata["dogId"]
    local actionId = event._usedata["actionId"]
    local eventName = event:getEventName()
end

return ActorSprite

3.清理

  • 在ActorSprite被釋放之后,需要將監聽刪除,否則收到消息后self為nil,將會導致異常(onCleanup將會在節點被刪除時自動調用)。
function ActorSprite:onCleanup()  -- cc.Node
    for i, var in ipairs(self.eventListeners) do
        cc.Director:getInstance():getEventDispatcher():removeEventListener(var)
    end  
end


免責聲明!

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



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