Javascript CreateJS CreateJS.Ticker.off(“勾选”,element.update)不工作

Javascript CreateJS CreateJS.Ticker.off(“勾选”,element.update)不工作,javascript,coffeescript,createjs,event-listener,Javascript,Coffeescript,Createjs,Event Listener,我正在制作一个射击游戏,其中我需要通过将子弹绑定到“滴答”事件来更新子弹的状态,但是当调用remove方法将子弹从“滴答”事件中移除时,它不会移除子弹。创建新实例后,该实例将不断更新,而不是绑定的实例 方法“add”/“remove”用于从“tick”事件绑定/解除绑定方法 class window.Stage stage = undefined counter = 0 fps = 60 add: (element) => element.id = counte

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

方法“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()
这就是我在游戏类中调用remove方法的方式

  run: () => 

    if @gun? && !@gun.alive
      @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)
如果有任何教程可以更好地理解如何正确使用侦听器,我们将非常感谢您提供的链接,谢谢您的帮助。

方法要求您传递调用
on()
生成的方法闭包,而不是传递的原始方法。这是因为
on()
方法生成一个闭包来维护作用域,而
addEventListener
不会为您定义方法的作用域,需要您自己绑定它们,或者使用全局或匿名处理程序

一定要把封口盖好,然后把它递过来。我不熟悉您示例中的语法,因此下面是一个普通的JS示例:

var listener = element.on("tick", handler, this);
element.off("tick", listener);
请注意,第三个参数是应该在其中调用方法的范围,如果您不传递它,它仍然会生成一个闭包,并在元素的范围内而不是匿名地激发它。
on()
方法还有其他一些不错的特性,例如“一次点火”和
event.remove()
功能

如果希望与DOM级别3事件具有相同的行为,则始终可以使用
addEventListener/removeEventListener
方法。

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

一定要把封口盖好,然后把它递过来。我不熟悉您示例中的语法,因此下面是一个普通的JS示例:

var listener = element.on("tick", handler, this);
element.off("tick", listener);
请注意,第三个参数是应该在其中调用方法的范围,如果您不传递它,它仍然会生成一个闭包,并在元素的范围内而不是匿名地激发它。
on()
方法还有其他一些不错的特性,例如“一次点火”和
event.remove()
功能


如果您希望使用与DOM级别3事件相同的行为,您可以始终坚持使用
addEventListener/removeEventListener
方法。

谢谢!您的回答非常有用,在尝试了其他选项后,我决定使用event.remove()功能。在我的例子中,由于删除逻辑是由相同的函数完成的,所以它变得更容易。谢谢!您的回答非常有用,在尝试了其他选项后,我决定使用event.remove()功能。在我的例子中,由于删除逻辑是由相同的函数完成的,所以它变得更容易。