PDA

Volledige versie bekijken : setInterval steeds langzamer?


Chrono
%Europe/Berlin %463 %2007, 12:06
Gedag,

Ik probeer net voor het eerst iets met setInterval te doen.

http://www.kirupa.com/developer/actionscript/setinterval.htm

Ik heb een script gemaakt dat om de zoveel tijd een mc toevoegt (om de framerate omlaag te helpen), en bijhoudt wat de framerate is. De mc's zelf zijn ook op setInterval gebaseerd, dus mij lijkt het logisch als de snelheid waarmee ze bewegen niet van de framerate afhangt, hoogstens dat het wat schokkeriger wordt.
Wat schetst mijn verbazing als de mc's desalniettemin langzamer gaan bewegen!

[?] : Waarom wordt de rotatie langzamer terwijl deze op tijd i.p.v. frames gebaseerd is? (tenminste, dat denk ik)

In de swf is de trace die de framerate geeft niet te zien, maar deze wordt van ±12 steeds lager, en om de 5 seconden gegeven.

De (nogal messy) code is als volgt:


//framechecker houdt bij wat de framerate is
_root.createEmptyMovieClip("framechecker", 1);
// a is voor de framachecker, om te zien hoeveel frames er na een bepaalde tijd verstreken zijn
a = 0;
// i is om de mc's een naam te geven en in een array te zetten
i = 0;
framechecker.onEnterFrame = function() {
a++;
};
//laat de gemiddelde framerate van de afgelopen vijf seconden zien
framechecker.checkframerate = function() {
trace(a/5);
a = 0;
return 0;
};
//het setIntervalletje dat de framechecker laat werken
drum = setInterval(framechecker, "checkframerate", 5000);
// turn is om de mc's te laten draaien, wordt door paint aangeroepen
turn = function (v) {
v._rotation += 2;
};
// blok is om de mc's in te zetten
blok = new Array();
// artist paint om de 200 ms een mc
paint = function () {
blok[i] = _root.attachMovie("blok", "blok"+i, _root.getNextHighestDepth());
blok[i]._x = random(400)+75;
blok[i]._y = random(300)+50;
blok[i].turner = setInterval(turn, 10, blok[i]);
i++;
};
artist = setInterval(paint, 200);


Alvast bedankt,

Chrono

M0L
%Europe/Berlin %471 %2007, 12:19
Dit is toch vrij logisch! Want anders zouden met setInterval nooit snelheidsverlies hebben. Flash kan de gevraagde actie's gewoon niet optijd uitvoer en dus wordt alles vertraagd

Chrono
%Europe/Berlin %530 %2007, 13:44
OK, ik dacht dat de snelheid alleen afhing van wat Flash op het scherm moest doen verschijnen en dat de rotatie achter de schermen nog wel bij te houden was.
Jammer dat AS2 zo traag is.
Bedankt!

Het komt er dus op neer dat setInterval alleen bruikbaar is als er een klein aantal bewerkingen tegelijk moet worden uitgevoerd? Anders kunnen niet alle bewerkingen binnen de tijd gedaan worden en maakt Flash alle klusjes maar voor de helft af?