05. marts 2008 - 17:00Der er
5 kommentarer og 1 løsning
Vent- og fortsæt script
Hej eksperter.
Jeg har lavet et ultrasimpelt script. Hensigten er at når kommandoen "ventvenligst(8);" køres, venter tidslinien 8 sekunder, før den fortsætter. Problemet er, at clearInterval tilsyneladende ikke virker. Jo flere gange, funktionen kaldes, jo flere intervaller sættes der... og til sidst er der så mange at ventefunktionen reelt set er uden virkning.
function ventvenligst(antalsekunder) { stop(); if (ventetid) {
clearInterval(ventetid); } var ventetid:Number = setInterval(this, "afspil", antalsekunder*1000); } function afspil() { play(); trace(getTimer()/1000); }
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Det skulle den også meget gerne gøre - MEN variablen itv (intervallet) er jo oprettet i ventvenligst, og derfor er variablen lokal og kan KUN findes i denne funktion. Så når man forsøger at bruge clearInterval på variablen itv i en anden funktion, duer det ikke, fordi variablen ikke er tilgængelig i denne funktion. Hvis du meget gerne vil have funktionen afspil defineret uden for funktionen, kan det faktisk løses nemt på én af to måder:
1: ------ // Variablen er nu oprettet uden for funktionen ventvenligst, og er ikke længere en lokal variabel var itv:Number; function ventvenligst(antalsekunder:Number):Void { stop(); itv = setInterval(afspil, antalsekunder * 1000); } function afspil():Void { clearInterval(itv); play(); } ------
2: ------ function ventvenligst(antalsekunder:Number):Void { stop(); // Nu oprettes variablen i stedet som en global variablen, der kan tilgås fra alle funktioner, movieclips etc. _global.itv = setInterval(afspil, antalsekunder * 1000); } function afspil():Void { clearInterval(_global.itv); delete _global.itv; play(); } ------
Eller du kan lave en lidt kluntet metode, hvis du ikke ønsker en variabel, der må være tilgængelig fra andre steder end funktionen, der opretter den:
------ function ventvenligst(antalsekunder:Number):Void { stop(); var itv:Number = setInterval(function() {clearInterval(itv); afspil();}, antalsekunder * 1000); } function afspil():Void { play(); } ------
... som faktisk svarer til...
------ function ventvenligst(antalsekunder:Number):Void { stop(); var itv:Number = setInterval(tempclear, antalsekunder * 1000); function tempclear():Void { clearInterval(itv); afspil(); } } function afspil():Void { play(); } ------
Men så er du ikke sluppet ret elegant fra det, vil jeg sige.
Perfekt. Tusind tak for forklaringen :) Hermed point...
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.