0

私はAS3、iOSSDK用のFlashAIR3.2で作業しています。myLoader画像の読み込みが完了した後でのみ、プログラムの一部を実行しようとしています。私はmyTimer.start();内部で実行されるを持っていますmyLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderComplete);

現時点で問題と思われるのは、プログラムが1000msを無視していることです。プログラム現在終了後に実行されmyLoaderていますが、遅延という点では独自のことをしているようです。

編集:ここでより正確に...プログラムはタイマー遅延を無視しているようです。タイマーが100000msに設定されていても。画像が読み込まれた直後に、プログラムの残りの部分が実行されているようです。

編集:コード内のtimerListener()だけでなく、Main()内でもメソッドを実行していました。私はそれらをコメントアウトしたと思った。おっと!

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

「タイマーが独自のことをしている」とはどういう意味か、はっきりとはわかりません。タイマーは予想より短いですか、長いですか?

ここで起こっていると思われるのは、タイマーの目盛りとフレームレートが同期していないことです。弾力性のある競馬場の概念に精通している場合は、Flashのシングルスレッドの性質(ワーカースレッドを使用している場合を除く)は、スクリプト中に画面を更新できないこと、またはその逆を意味することをご存知でしょう。つまり、ディスプレイリストの更新中にタイマーが起動した場合、Flashがキュー内のさまざまなものに優先順位を付ける方法によっては、ディスプレイリストが終了するまで待機する必要があり、他のスクリプトが実行されるまで待機する必要がある場合もあります。

タイマーAPIから:

SWFファイルのフレームレートまたはランタイム環境(使用可能なメモリおよびその他の要因)に応じて、ランタイムはわずかにオフセットされた間隔でイベントをディスパッチする場合があります。たとえば、SWFファイルが100ミリ秒間隔である10フレーム/秒(fps)で再生するように設定されているが、タイマーが80ミリ秒間隔でイベントを発生させるように設定されている場合、イベントは100ミリ秒間隔の近くでディスパッチされます。 。メモリを大量に消費するスクリプトも、イベントを相殺する可能性があります。

于 2013-02-04T23:16:41.800 に答える