2009-06-08 10 views
1

Ich erstelle eine Website mit einer Begrüßungsseite, die 5 Sekunden lang wartet, bevor die Abspielposition automatisch an Bild 17 gesendet wird, wenn niemand auf die Eingabetaste geklickt hat.Wartefunktion Aktionskript 2.0

Mein Code dafür ist hier:

Funktion wait() { stop(); var myInterval = setInterval (function() { _level0.menu_number2 = 0; gotoAndStop (17); clearInterval (myInterval); }, 5 * 1000); // stoppe für 5 Sekunden } wait();

Das alles funktioniert gut, aber wenn ich nicht gewartet habe und auf der Website bin, bevor 5 Sekunden abgelaufen sind, werde ich plötzlich nach 5 Sekunden unbeabsichtigt zu Bild 17 zurückgebracht.

Jetzt weiß ich, ich brauche etwas in meiner Code-Struktur, um zu überprüfen, ob sich die Bedingungen während dieser fünf Sekunden geändert haben, dh der Spielkopf hat sich über Frame 15 hinaus bewegt und wenn nicht, bin ich mir nicht sicher was etwas ist.

bitte helfen.

+1

Intro Splash-Seite hilft? Autsch! :) – Hugoware

+0

warum nicht setTimeout verwenden? greetz back2dos – back2dos

Antwort

1

Versuchen Sie diesen Code: sie nutzt etwas ein Verschluss (schauen Sie, wenn Sie daran interessiert sind) genannt

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 

Sie können auch eine globale Variable bleiben irgendwo und prüfen, ob es, aber das verpestet nur die globale Namensraum.

0

Sie können clearInterval (myInterval) immer löschen, wenn sie auf die Schaltfläche zum Überspringen klicken. Oder wickle es unnötigerweise in eine Funktion: function stopwait() {clearInterval (myInterval); };

die Rahmennummern Um zu überprüfen, die Sie verwenden können: if (_root._currentFrame < 17)

+0

Das Problem hier ist, dass der Verweis auf myInterval stirbt, nachdem wait() fertig ist. Dafür ist die Schließung gedacht. Ja - es wäre wahrscheinlich sauberer, die wait() -Funktion überhaupt nicht zu haben (und nur eine Reihe von Anweisungen in einem Frame zu haben), aber das war nicht das, wonach die Frage gefragt wurde. – zenazn

0

Von Flash Player 8 ab gibt es eine eigene Funktion SetTimeout genannt, dass Sie eine Pause implementieren können. Ich gehe davon aus intern, es ist ein Wrapper um setInterval etc. Es funktioniert wie folgt:

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

setTimeOut(onContinue, 1000, "hello"); 

Der erste Parameter der Funktion aufzurufen ist. Der zweite Parameter ist die Wartezeit in Millisekunden (1000 = 1 Sekunde) und der dritte Parameter ist optional und kann verwendet werden, um einen Wert an den Rückruf zu übergeben.

0

Ich dachte, ich sollte dieses Problem aktualisieren, da ich ein bisschen voreilig war.

Nach ein paar Tests habe ich herausgefunden, dass Zenazns Code ein wenig mehr benötigt, also habe ich die _currentFrame-Zeile von Eric Muyser hinzugefügt und alles funktioniert gut, also nochmals vielen Dank.Hier

ist das Actionscript:

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

Was eine seltsame und hart codierte Lösung ist das. Nun, wenn es für dich funktioniert ... – Luke

0

Sie die tweenlite Bibliothek verwenden könnten http://blog.greensock.com/tweenliteas2/

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

dann, wenn jemand dies überspringt Sie

TweenLite.killDelayedCallsTo(function:Function) 

, die den ursprünglichen delayedCall tötet nennen .

sehr einfach und leistungsstark.

Hoffnung, dass Josh