频道栏目
首页 > 资讯 > 其他 > 正文

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

17-05-03        来源:[db:作者]  
收藏   我要投稿

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

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

相关TAG标签
上一篇:使用Android Studio运行项目出现 UnsupportedMethodException 错误的解决办法
下一篇:关于Android下FFmpeg配合libx264 NEON默认开启的验证
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站