PDA

Volledige versie bekijken : [F8]Clearinterval probleem...


nahkranoth
%Europe/Berlin %450 %2005, 10:49
Ik kan heel mooi een interval aanmaken, Alleen wil de clearInterval niet werken...


ello = false;
_root.onEnterFrame = function() {
if (ello == true) {
clearInterval(myInter);
ello = false;
}
myInter = setInterval(gotto, 1000);
};

function gotto() {
trace("ellow");
ello = true;
}


maar hij doet t niet... hij wacht eerst netjes 1000 miliseconden en dan blijft hij constant gotto(); uitvoeren.

Waarom krijg ik clearInterval niet goed??.. weet iemand dat?

Roenes
%Europe/Berlin %452 %2005, 10:50
Komt denk ik doordat het in de onEnterFrame staat. je zegt eerst dat als ello true is, het interval verwijderd moet worden maar na de if maak je weer een nieuw interval aan. Zo kom je dus in een lus die steeds herhaalt. Waarom je een onEnterFrame gebruikt is me ook niet helemaal duidelijk :)

nahkranoth
%Europe/Berlin %455 %2005, 10:55
maar dan zou die interval toch weer opnieuw moeten beginnen met tellen?
hij herhaalt t nu zonder er een tijd tussen te laten alleen de eerste keer doet ie dat

Roenes
%Europe/Berlin %464 %2005, 11:09
Zonder dat er nu tijd tussen zit komt dus volgens mij door die onEnterFrame. Het interval wordt een x aantal keer per seconde aangemaakt en zo wordt dus ook de functie gotto een x aantal keer per seconde aangemaakt. Maar je kan volgens mij jouw code vervangen door dit:

myInter = setInterval(gotto, 1000);

function gotto() {
trace("ellow");
clearInterval(myInter);
}
Dit zou volgens mij perfect moeten werken :)

nahkranoth
%Europe/Berlin %470 %2005, 11:17
Dat werkt idd wel gewoon :), maar ik snap de logica er nog niet echt achter waarom die van mij dan niet werkt.

Thnx!

theFlashWizard
%Europe/Berlin %473 %2005, 11:22
intervals beginnen niet opnieuw.. die gaat zichzelf overschrijven ofzo.. als dat ook zo is werkt de clearInterval ook niet..
dan kan je hem wel ff reseten voordat je hem opnieuw maakt door hem te clearen maar omdat jij em in een onEnterFrame had gezet zou hij dus ieder frame opnieuw gemaakt worden.. mischien wel 12 x per seconde.. ligt aan je fps

SaphuA
%Europe/Berlin %599 %2005, 14:23
Je maakt nu elk frame een interval aan, en deze blijven allemaal staan. Als je ook naar je trace kijkt, zie je dat er niet elke seconde een trace gedaan wordt, maar vele malen vaker.

Edit: Oke laat maar, Wizard had 't al verteld :)

Dauntless
%Europe/Berlin %766 %2005, 18:24
Je snapt niet waarom die van jou niet werkt? Ok, dan spelen we ff zelf compiler :D.


//alles goed hier
ello = false;
//er wordt een onEnterFrame gestart
_root.onEnterFrame = function() {
//ello is false, dus dit slaan we de eerste keer over
if (ello == true) {
clearInterval(myInter);
ello = false;
}
//hier wordt er dus een nieuw interval gestart, met een vertraging van 1000 seconden.
myInter = setInterval(gotto, 1000);
};


Alles goed tot daar toe, maar op de tweede frame wordt alles in de onEnterFrame herhaalt, zodus:

//ello is nog altijd false, dus dit slaan we over
if (ello == true) {
clearInterval(myInter);
ello = false;
}
//hier wordt OPNIEUW nieuw interval gestart, met een vertraging van 1000 seconden.
myInter = setInterval(gotto, 1000);


Dus, nu lopen er al 2 intervallen! Wanneer uiteindelijk je 'gotto' functie wordt opgeroepen, wordt 'ello' op false gezet, en wordt de laatst aangemaakte interval gecleared (alleen de laatst aangemaakte! naar die andere intervals zijn geen referenties meer, dus daar graak je niet meer aan!).

En zelfs wanneer 'ello == true', wordt er na die if WEER een interval aangemaakt. Dat zorgt er voor dat er elke frame een nieuw interval wordt aangemaakt, en om de seconde wordt er 1 interval verwijdert. Waardoor je dus uiteindelijk met 10000-en intervallen zit met telkens 1000/12 milliseconden ertussen (bij een FPS van 12).

Roenes
%Europe/Berlin %941 %2005, 22:35
Met zoveel verschillende uitleggen moet er wel wat bruikbaars tussen zitten ;)