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

来源:互联网 发布:http是什么 java题 编辑:程序博客网 时间:2024/06/07 12:47

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()使消息接收有效
-- listenerlocal 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) endfunction DogSprite:onChangeState(event)    local dogId = event._usedata["dogId"]    local actionId = event._usedata["actionId"]    local eventName = event:getEventName()endreturn 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

0 0
原创粉丝点击