Gideros:自定义事件未能到达事件监听器。

在Gideros中,我使用自定义事件来更新分数。我对事件的接收者有以下代码(为了简洁起见,有些行省略):

GameInfoPanel = Core.class(Sprite)

function GameInfoPanel:init()
    self:addEventListener("add_score", self.onAddScore, self) -- 在此处注册事件监听器
    self.score = 0
end

function GameInfoPanel:onAddScore(event)
  self.score = self.score + event.score -- << 此行永远不会被执行
end

以下是触发事件的代码:

      local score_event = Event.new("add_score")
      score_event.score = 100
      self:dispatchEvent(score_event)

然而,在上面注册为监听器的函数永远不会被执行。

点赞
用户274354
用户274354

好的,我在 Gideros 手机论坛上找到了答案:http://giderosmobile.com/forum/discussion/4393/stuck-with-simple-custom-event/p1

用户 ar2rsawseen 在那里指出,发送方和接收方必须通过一些共同的对象进行通信(不确定如何或为什么,但它有效),因此以下代码实际上可以为我所用:

GameInfoPanel = Core.class(Sprite)

function GameInfoPanel:init()
    stage:addEventListener("add_score", self.onAddScore, self) -- 'stage' 是共通的并且可访问到两者
    self.score = 0
end

function GameInfoPanel:onAddScore(event)
  self.score = self.score + event.score
end

而事件的发送者:

  local score_event = Event.new("add_score")
  score_event.score = 100
  stage:dispatchEvent(score_event)
2015-08-14 05:40:48