gpt4 book ai didi

javascript - CreateJS createjs.Ticker.off ("tick",element.update)不起作用

转载 作者:行者123 更新时间:2023-11-28 15:14:47 26 4
gpt4 key购买 nike

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

方法“add”/“remove”用于绑定(bind)/取消绑定(bind)“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 类中调用删除方法的方式

  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)

如果有任何教程可以更好地理解如何正确使用监听器,我们将非常感谢您提供链接,谢谢。

最佳答案

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

确保存放好封闭物,然后将其传递。我不熟悉你的示例中的语法,所以这里是一个普通的 JS 示例:

var listener = element.on("tick", handler, this);
element.off("tick", listener);

请注意,第三个参数是该方法应在其中调用的范围,如果您不传递它,它仍然会生成一个闭包,并在元素的范围内而不是匿名地触发它。 on() 方法还有一些其他不错的功能,例如“fire Once”和 event.remove() 功能。

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

关于javascript - CreateJS createjs.Ticker.off ("tick",element.update)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34543248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com