2009-06-08 26 views
1

私は5秒間待機するイントロのスプラッシュページを持つWebサイトを作成しています。これは、誰も同じことを行うエンターボタンをクリックしていない場合、再生ヘッドをフレーム17に自動的に送ります。待機関数アクションスクリプト2.0

このための私のコードはここにある:

機能待ち(){ 停止(); var myInterval = function(){ _level0.menu_number2 = 0; gotoAndStop(17); clearInterval(myInterval); }、5 * 1000); // 5秒間停止する } wait();

これはすべて正常に動作しますが、待機しておらず、5秒前にサイトに入っていたら、5秒後に突然フレーム17に戻ってきます。

ここ5秒間に条件が変わったかどうかを確認するコード構造が必要なことはわかっています。つまり、再生ヘッドがフレーム15を超えて移動している場合は、何もしないでください何かがある。

助けてください。

+1

イントロのスプラッシュページ?おお! :) – Hugoware

+0

なぜsetTimeoutを使用しないのですか? greetz back2dos – back2dos

答えて

1

このコードを試してみてください:それはクロージャと呼ばれるものを使用しています(もし興味があるなら、それを見て)

function wait(){ 
    stop(); 
    var myInterval = setInterval(function(){ 
     _level0.menu_number2 = 0; 
     gotoAndStop(17); 
     clearInterval(myInterval); 
    }, 5*1000); // stop for 5 seconds 
    return function(){ clearInterval(myInterval); }; 
} 
var abortFunction = wait(); // Calls wait(), interval starts ticking 
abortFunction(); // Aborts the interval 

またどこかでグローバル変数を固執し、それをチェックし、それはちょうど地球を汚染可能性名前空間。

0

[スキップ]ボタンをクリックすると、常にClearTypes(myInterval)をクリアできます。または、不必要に関数にラップする:function stopwait(){clearInterval(myInterval); };

あなたが使用することができ、フレーム番号を確認するには:(_root._currentFrame < 17)場合

+0

ここでの問題は、wait()の後にmyIntervalへの参照が終了することです。それがクロージャのためのものです。はい、それはおそらくwait()関数を全く持たないように(おそらくフレームに文句がたくさんあります)、もっと洗練されたものになるでしょうが、それは質問が求めていたものではありません。 – zenazn

0

のFlash Player 8以降から、あなたが一時停止を実装するために使用することができますのsetTimeoutと呼ばれる組み込み関数があります。私は内部的にはsetIntervalのラッパーです。これは次のように動作します。

function onContinue(message) 
{ 
    trace("continue saying: " + message); 
} 

setTimeOut(onContinue, 1000, "hello"); 

最初のパラメーターは呼び出す関数です。 2番目のパラメータはミリ秒単位で待機する時間(1000 = 1秒)で、3番目のパラメータはオプションでコールバックに値を渡すために使用できます。

0

私はこれまで少し前倒ししていたので、この問題を更新する必要があります。

いくつかのテストの後、Zenaznのコードが少し余分に必要なので、私はEric Muyserの_ CurrentFrameラインを追加しました。ここで

アクションスクリプトです:

function wait(){ 
    stop(); 
    var myInterval = setInterval(function(){ 
     if(_currentFrame < 15){//This statement checks to see if the play head has moved past frame 15 
     gotoAndStop(17); 
    } 
     clearInterval(myInterval); 
    }, 5*1000); // stop for 5 seconds 
    return function(){ clearInterval(myInterval); }; 
} 
var abortFunction = wait(); // Calls wait(), interval starts ticking 
+0

これは奇妙でハードコードされた解決策です。まあ、それがあなたのために働くなら... – Luke

0

誰かがこれをスキップする場合は、元のdelayedCallを殺す

TweenLite.killDelayedCallsTo(function:Function) 

を呼び出すことができ、その後http://blog.greensock.com/tweenliteas2/

TweenLite.delayedCall(delay:Number, onComplete:Function) 

tweenliteライブラリを使用することができます。

非常に簡単で強力です。

希望すると、 Josh

関連する問題