actionscript-3 - ENTER_FRAME 事件超过 ENTER_FRAME 事件

标签 actionscript-3 events event-handling

假设我们在 Flash 库中有一个动画片段“Enemy”,并且有一个类“Enemy.as”与之相关联,它监听 ENTER_FRAME 事件,如下所示,

public function Enemy():void
{
    //constructor of this "Enemy.as" class
    addEventListener(Event.ENTER_FRAME, move);
}

private function move(evt:Event):void
{
    x += 5;
}

现在我的问题是这个“Enemy.as”是否在其他类中实例化,例如“Main.as”,它再次在同一个实例化的 Enemy 对象上使用 ENTER_FRAME 事件,如下所示,

public function Main():void
{
    //constructor of this "Main.as" class
    enemy1 = new Enemy();
    enemy1.addEventListener(Event.ENTER_FRAME, checkCollision);
}

private function checkCollision(evt:Event):void
{
    if(enemy1.x == mainObj.x)
    {
        //do something
    }        
}

这是优化方面的好方法吗?或者根本不应该使用这种方法?

最佳答案

从性能的角度来看,最好只在一个位置(例如在您的主应用程序类中)监听 ENTER_FRAME,然后在所有对象上调用自定义 update() 方法需要更新。例如,对于游戏来说,这是一种非常常见的方法。

从性能的角度来看,这是非常优越的一个原因是不需要创建新的 Event 实例。如果您有 100 个监听器(这在使用您概述的方法时并不少见),则意味着每帧有 100 个 Event 类的新实例,并且实例化类是您在 Flash 中可以做的最繁重的事情之一。

您实际上很少需要 ENTER_FRAME 处理程序中的 Event 对象,因此使用 update() 方法更有意义。如果可以,请尝试将其他事件以及游戏等性能关键型应用集中起来。

关于actionscript-3 - ENTER_FRAME 事件超过 ENTER_FRAME 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7263300/

相关文章:

php - 从 actionscrip3 到 php 的变量传递

css - 在 Adob​​e flex 4 中使用 Font Awesome

apache-flex - 简化 Flex/AS3 代码

php - 如何控制 Laravel 中的事件触发

javascript - 在 Safari 中按下鼠标右键的 MouseMove 事件不起作用

jquery - Chrome 没有正确观察脚本标签上的 onload 事件?

javascript - 使用 jQuery/Javascript 的 DOM 事件仅适用于 $().ready 或 window.onload

actionscript-3 - 有没有办法使用 AS3 导出 PSD

javascript - 动态创建的元素上的事件绑定(bind)?

C#知道设置了多少个EventHandlers吗?