CreateJS createjs.Ticker.off("tick", element.update) 不工作
CreateJS createjs.Ticker.off("tick", element.update) not working
我正在制作一个射击游戏,我需要通过将它们绑定到 'tick' 事件来更新子弹的状态,但是当调用 remove 方法将它们从 'tick' 中移除时事件它不删除它。创建新实例后,它会不断更新,而不是绑定的实例。
方法'add'/'remove'用于bind/unbind来自'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 方法的方式 class
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)
如果有任何教程可以更好地理解如何正确使用监听器,link 将不胜感激,提前致谢。
off()
方法要求你传递调用on()
生成的方法闭包,而不是传递的原始方法。这是因为 on()
方法生成一个闭包来维护作用域——而 addEventListener
不会为您确定方法的作用域,需要您自己绑定它们,或者使用全局或匿名处理程序。
确保关闭闭包并传递它。我不熟悉你示例中的语法,所以这是一个普通的 JS 示例:
var listener = element.on("tick", handler, this);
element.off("tick", listener);
请注意,第三个参数是应该在其中调用该方法的范围,如果您不传递它,它仍然会生成一个闭包,并在元素的范围内触发它,而不是匿名触发。 on()
方法还有一些其他不错的功能,例如 "fire once" 和 event.remove()
功能。
如果您更喜欢与 DOM 级别 3 事件相同的行为,您始终可以坚持使用 addEventListener/removeEventListener
方法。
我正在制作一个射击游戏,我需要通过将它们绑定到 'tick' 事件来更新子弹的状态,但是当调用 remove 方法将它们从 'tick' 中移除时事件它不删除它。创建新实例后,它会不断更新,而不是绑定的实例。
方法'add'/'remove'用于bind/unbind来自'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 方法的方式 class
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)
如果有任何教程可以更好地理解如何正确使用监听器,link 将不胜感激,提前致谢。
off()
方法要求你传递调用on()
生成的方法闭包,而不是传递的原始方法。这是因为 on()
方法生成一个闭包来维护作用域——而 addEventListener
不会为您确定方法的作用域,需要您自己绑定它们,或者使用全局或匿名处理程序。
确保关闭闭包并传递它。我不熟悉你示例中的语法,所以这是一个普通的 JS 示例:
var listener = element.on("tick", handler, this);
element.off("tick", listener);
请注意,第三个参数是应该在其中调用该方法的范围,如果您不传递它,它仍然会生成一个闭包,并在元素的范围内触发它,而不是匿名触发。 on()
方法还有一些其他不错的功能,例如 "fire once" 和 event.remove()
功能。
如果您更喜欢与 DOM 级别 3 事件相同的行为,您始终可以坚持使用 addEventListener/removeEventListener
方法。