我有一个非常复杂的游戏,有许多视图和许多控制器,它工作得很好,但周期性滞后。我正在尝试修复我的代码,因此它的效率与我可以实现的一样高,但我对AS3处理事件的人有一些疑问。
现在这是一个非常基本的例子:
AppController加载5个不同的OverlayControllers。这些OverlayControllers中的每一个都在我的AppController监听完成后调度Event.COMPLETE。无论我在游戏中的哪个位置,我都会有一个常量EventListener来监听OverlayControlllers。
Overlay打开时,我应该只有那些听众吗?当它们关闭时将它们移除?
我应该绕过事件监听器周期并将AppController传递给OverlayControllers,这样它就可以调用公共函数而不需要EventListener吗?
要明确这些不是我要从舞台上移除的对象。他们只是被隐藏了。如果我删除了一个对象,我会在销毁之前删除它的事件监听器。
答案 0 :(得分:1)
首先下载Adobe Scout(http://www.adobe.com/devnet/scout/articles/adobe-scout-getting-started.html)并查看造成"滞后的问题" - 可能是垃圾收集......然后修复问题。删除尽可能多的侦听器总是一件好事,但要确保这些是导致问题的原因。配置内存使用情况并尝试将对象创建/销毁保持在最低限度,以避免垃圾回收(在主游戏循环期间)。