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

前端之家收集整理的这篇文章主要介绍了cocos2d-x lua 使用自定义消息EventCustom前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

version: cocos2d-x 3.6

1.发送消息

  1. -- post message
  2. -- event将会被传递给消息接收函数,所以所有需要传递的数据都可放到event
  3. local event = cc.EventCustom:new("MSG_TEST")
  4. event._usedata = {["state"]=self.curState,["actionId"]=self.actionId}
  5. cc.Director:getInstance():getEventDispatcher():dispatchEvent(event)

2.监听与接收

  • 监听消息需要调用self:enableNodeEvents()使消息接收有效
  1. -- listener
  2. local ActorSprite = class("ActorSprite",cc.Node)
  3.  
  4. function ActorSprite:initEventListener()
  5. self:enableNodeEvents() -- cc.Node
  6. self.eventListeners = {} -- user to delete when dtor
  7.  
  8. local listener = cc.EventListenerCustom:create(MSG_TEST,handler(self,self.onChangeState))
  9. local eventDispatcher = self:getEventDispatcher()
  10. eventDispatcher:addEventListenerWithFixedPriority(listener,1)
  11. table.insert(self.eventListeners,listener)
  12. end
  13.  
  14. function DogSprite:onChangeState(event)
  15. local dogId = event._usedata["dogId"]
  16. local actionId = event._usedata["actionId"]
  17. local eventName = event:getEventName()
  18. end
  19.  
  20. return ActorSprite

3.清理

  • 在ActorSprite被释放之后,需要将监听删除,否则收到消息后self为nil,将会导致异常(onCleanup将会在节点被删除自动调用)。
  1. function ActorSprite:onCleanup() -- cc.Node
  2. for i,var in ipairs(self.eventListeners) do
  3. cc.Director:getInstance():getEventDispatcher():removeEventListener(var)
  4. end
  5. end

猜你在找的Cocos2d-x相关文章