AS2 使用 onEnterFrames 处理多个影片剪辑时减少延迟的最佳方法

Posted

技术标签:

【中文标题】AS2 使用 onEnterFrames 处理多个影片剪辑时减少延迟的最佳方法【英文标题】:AS2 Best way to decrease lag when dealing with several movieclips with onEnterFrames 【发布时间】:2013-05-26 17:30:27 【问题描述】:

正如标题所述,我想知道在舞台上同时处理多个影片剪辑的最佳方式是什么,每个影片剪辑都有自己的 onEnterFrame 函数。假设屏幕上同时有 50 个敌人,不断播放行走动画。 onEnterFrame 函数将包括获取方向、移动 X/Y 值、检查玩家与自身之间的距离、检查它是否处于可攻击距离等。您可以想象会发生很多延迟。

这种问题通常会被克服的游戏类型是僵尸游戏,屏幕上会同时出现多个僵尸。

在处理这样的多个影片剪辑时,减少延迟的最佳方法是什么?

【问题讨论】:

这是同一用户提出的三个相关问题之一,问题是:AS2 Best way to decrease lag when dealing with several movieclips with onEnterFrames、Dealing with infinite/huge worlds in actionscript 2、Actionscript 2 large tile-based maps creating lag 【参考方案1】:

每个 onEnterFrame 侦听器都会创建新的事件对象,因此您拥有的 onEnterFrame 侦听器越多,每帧创建的对象就越多。在 AS2 中,对象的创建非常缓慢。

因此,要考虑的一种优化是只注册 一个 onEnterFrame 事件,然后从“主” onEnterFrame 循环遍历所有敌人等,并在每个实例上调用更新函数。

从代码结构的角度来看,这也是一个好主意,因为您现在每帧只有一段代码运行。它使查看每个帧实际运行的内容变得更容易。要暂停游戏,您只需停止主 onEnterFrame,整个游戏就会停止。

【讨论】:

我已经这样做了,并且可以看到一些改进,但它仍然运行有点慢。您还能想到其他优化吗? 另一个优化是避免复杂的矢量图形,而偏爱位图。

以上是关于AS2 使用 onEnterFrames 处理多个影片剪辑时减少延迟的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

ActionScript 3 使用Actionscript 3的onEnterFrame事件

多个按钮的 AS2 数组共享相同的操作以及单独的操作

防止在 Flash AS2 事件处理程序中使用箭头键更改焦点?

AS2 ExternalInterface:错误:引发了无效异常

将带有 AS2 动作和 ActionScript 的 FLA 资源编译为 SWF

将 AS2 SWF 加载到 AS3 SWF 中并在 URL 中传递变量