CreateJS createjs.Ticker.off(“ tick”,element.update)不起作用

问题描述 投票:0回答:1

我正在制作射击游戏,在其中需要通过将子弹绑定到'tick'事件来更新子弹的状态,但是,当调用remove方法将子弹从'tick'事件中删除时,它不会将其删除。创建新实例后,它将不断更新,而不是被绑定的实例。

方法'add'/'remove'用于绑定/取消绑定'tick'事件中的方法

class window.Stage

  stage = undefined
  counter = 0
  fps = 60

  add: (element) =>
    element.id = counter++
    stage.addChildAt(element.view, element.id)
    element.listener = createjs.Ticker.on("tick", element.update)

  remove: (element) =>
    createjs.Ticker.off("tick", element.listener) # Not removing!
    stage.removeChildAt(element.id)

  update: () =>
    stage.update()

这是我在Game类中调用remove方法的方式

  run: () => 

    if @gun? && [email protected]
      @stage.remove(@gun)
      @gun = undefined

    if @player.shooting() && !@gun?     
      @gun = @player.shoot() # Ticker keeps updating new instance
      @stage.add(@gun)

    for bunker in @bunkers
      if @gun? && bunker.gotShot(@gun)
        @gun.alive = false

这是创建项目符号的方式

class window.Player      
  shoot: =>
    new Gun(@name, @x, @y - radius, false)

如果有任何教程可以更好地理解如何正确使用侦听器,则非常感谢链接,谢谢。

我正在制作射击游戏,需要将子弹绑定到'tick'事件来更新子弹的状态,但是,当调用remove方法将子弹从'tick'事件中移除时,它不会...

javascript coffeescript createjs event-listener
1个回答
5
投票

off()方法要求您传递通过调用on()生成的方法闭包,而不传递通过的原始方法。这是因为on()方法生成了一个闭包来维护范围-而addEventListener不会为您设置范围方法,要求您自己绑定它们,或者使用全局或匿名处理程序。

© www.soinside.com 2019 - 2024. All rights reserved.