0

我在 AS3、Flash AIR 3.2 for iOS SDK 中工作。我仅在myLoader完成加载图像后才尝试运行部分程序。我有一个myTimer.start();在里面运行myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderComplete);

目前的问题似乎是程序忽略了 1000 毫秒。该程序在完成后正在运行myLoader,但就延迟而言,它似乎只是在做自己的事情。

编辑:在这里更精确......该程序似乎忽略了定时器延迟。即使 Timer 设置为 100000ms。加载图像后,它似乎正在运行程序的其余部分。

编辑:我的方法仍然在我的 Main() 以及代码中的 timerListener() 中运行。以为我评论了他们。哎呀!

var myTimer:Timer = new Timer(1000);

public function Main()
    {
        init();
        displayImage();

        myTimer.addEventListener(TimerEvent.TIMER, timerListener);
        myTimer.addEventListener(TimerEvent.TIMER_COMPLETE, timerDone);

    }

public function displayImage():void {

        myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderComplete);

        myLoader.load(fileRequest);
    }

public function onLoaderComplete(e:Event) {
        //start Timer event here
        myTimer.start();
    }

public function timerListener (e:TimerEvent):void{
        trace("Timer is Triggered");
        myTimer.stop();

        aMethod();
        anotherMethod();
        moreMethods();
    }
4

1 回答 1

2

您并没有真正阐明“计时器正在做自己的事情”的意思。计时器比您预期的短还是长?

我认为这里可能发生的是您的计时器滴答声和帧速率不同步。如果您熟悉elastic racetrack的概念,您就会知道 Flash 的单线程特性(除非您使用工作线程)意味着屏幕无法在脚本期间更新,反之亦然。这意味着如果您的计时器在显示列表更新时触发,它只需要等到显示列表完成,甚至可能必须等到其他脚本运行,这取决于 Flash 如何对其队列中的不同事物进行优先级排序。

计时器 API

根据 SWF 文件的帧速率或运行时环境(可用内存和其他因素),运行时可能会以稍微偏移的间隔调度事件。例如,如果 SWF 文件设置为以每秒 10 帧 (fps) 的速度播放,即 100 毫秒的间隔,但您的计时器设置为以 80 毫秒的间隔触发事件,则该事件将在接近 100 毫秒的间隔时调度. 内存密集型脚本也可能抵消事件。

于 2013-02-04T23:16:41.800 回答