【发布时间】:2016-09-10 22:43:52
【问题描述】:
我正在处理一个 AS3 项目,对于其中一种效果,我使用计时器来切换颜色然后停止。函数如下。
//global variable
private var valueAnimationTimer:Timer = new Timer(50);
//constructor
valueAnimationTimer.addEventListener(TimerEvent.TIMER, scrollUp );
//function
private function scrollUp(e:TimerEvent):void
{
var i:int = e.currentTarget.currentCount as int;
if (i < 10)
{
if (colored){
if (i % 2 == 0){
ChangeColor(ico, flickerColor);
}
else{
ico.transform.colorTransform = new ColorTransform();
}
}
tfValue.y -= 7.5;
}
else
{
RemoveFilters(ico);
tfValue.y = ico.height / 2;
e.currentTarget.reset();
RemoveSprite(tfValue);
colored = false;
}
}
每个角色(对象)都有它自己的这个函数版本,它发生在不同的时间(比如受伤或中毒时)。监听器在构造函数中添加一次,只有在角色死亡时才会被移除并从舞台上移除。这里的问题是在至少 3 个字符上使用计时器后,帧速率开始下降。每次调用该函数时,帧速率都会越来越低。
我不明白的是,如果计时器停止了,并且只添加了一次侦听器,因此不会使堆栈过载,那么为什么在实际使用侦听器后帧速率开始下降?它不会永远只运行一小段时间,而是一次又一次地发生。当帧速率下降时,整个程序开始严重滞后并最终冻结。我不知道是什么原因造成的
【问题讨论】:
-
计时器侦听器是处理游戏计时的一种相当低效的方法。最好有一个单一的游戏循环来检查每个循环是否需要更新。使用计时器,您可能会在一个游戏周期中触发多个侦听器,如果您有许多这样设置的角色,则会给玩家带来压力。
-
我明白了。我正在查看另一个论坛主题,有人说 AS3 可以轻松处理 50-100 多个对象及其事件,所以我认为一切都会很花哨。谢谢:)
-
Event.ENTER_FRAME 监听器的效率如何? AS3 能否更有效地处理这一问题?
-
使用游戏循环更有效,游戏中的一个侦听器 ENTER_FRAME 会更新所有对象。检查那里的答案stackoverflow.com/questions/7862624/…
-
哇,把世界和第一层对象分开等等。我觉得我应该知道这一点。非常感谢。
标签: performance actionscript-3 timer actionscript