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事件
防止在 Flash AS2 事件处理程序中使用箭头键更改焦点?
AS2 ExternalInterface:错误:引发了无效异常