【问题标题】:AS3 Should i removeEventListenerAS3 我应该删除EventListener
【发布时间】:2016-04-07 15:22:37
【问题描述】:

我有一个非常复杂的游戏,它有很多视图和很多控制器,它运行得非常好,但有时会出现延迟。我正在尝试修复我的代码,使其尽可能高效,但我对 AS3 处理事件的人有一些疑问。

下面是一个非常基本的例子:

AppController 加载 5 个不同的 OverlayController。这些 OverlayController 中的每一个都在我的 AppController 侦听的完成后调度一个 Event.COMPLETE。无论我在游戏中的哪个位置,我都有一个恒定的 EventListener 来监听那些 OverlayControlllers。

当 Overlay 打开时,我应该只让那些听众在那里吗?并在它们关闭时移除它们?

我是否应该绕过事件侦听器周期并将 AppController 传递给 OverlayControllers,以便它可以调用公共函数而不需要 EventListener?

需要明确的是,这些不是我要从舞台上移除的对象。他们只是被隐藏起来。如果我删除了一个对象,我总是在销毁它们之前删除它的事件监听器。

【问题讨论】:

  • 监听事件在任何情况下都不会产生延迟,另一方面,如果许多事件被不断地调度,则调度事件可能会产生。当很少涉及延迟问题事件时,很可能是由于大量 GC 传递导致的高对象创建。

标签: actionscript-3 flash


【解决方案1】:

首先下载 Adob​​e Scout (http://www.adobe.com/devnet/scout/articles/adobe-scout-getting-started.html) 并查看导致“滞后”的原因 - 可能是垃圾收集...然后解决问题。删除尽可能多的听众总是一件好事,但要确保是这些听众引起了问题。分析内存使用情况并尝试将对象创建/销毁保持在最低限度以避免垃圾收集(在主游戏循环期间)。

【讨论】:

  • 如果负载是由大量对象创建/销毁引起的,并且您有很多相同的对象 - 您可能需要实现对象池
猜你喜欢
  • 2014-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-22
  • 1970-01-01
  • 2021-06-20
  • 2020-04-19
相关资源
最近更新 更多