【问题标题】:Timer Efficiency定时器效率
【发布时间】: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


【解决方案1】:

还要注意,在 Timer 函数内部,第一个数字是您在 MILLISECONDS 中的计数,第二个是重复计数

var fl_TimerInstance:Timer = new Timer(240000, 1);

所以上面的这个例子是一个重复 1 次的 4 分钟计时器

我提出这个是因为你的设置为 50 毫秒,这非常快,哈哈

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 2012-04-04
    • 2011-07-03
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多