OOP-Timer

Adam Wille

Erfahrenes Mitglied
Hi Leute :)

Was haltet ihr von folgender Timer-Variante in OOP umgesetzt?
PHP:
MovieClip.prototype.timer = function (time, interval) {
	timercheck = function () {
		endTime = getTimer();
		diff = endTime - startTime;
		trace(diff);
		if (diff >= time) {
			clearInterval(timeInterval);
			delete startTime;
			delete endTime;
			delete diff;
			delete timeInterval;
		}
	}
	startTime = getTimer();
	timeInterval = setInterval(timercheck, interval);
}

timer(50, 1);
Einfacher konnte ich's mir von der Sacher her erstmal nicht vorstellen...

Eure Ideen, Vorschläge, Meinungen, Erweiterungen etc. würden mich da mal interessieren. :)

Geist,
antworthungrig
 
Zuletzt bearbeitet:
Hi geist

sieht interessant aus. könntest du nicht noch ein praktisches beispiel bringen, bei dem deine methode zur anwendung kommt ?

gruss skyla
 
Mh, es gibt ehrlich gesagt noch 2 Dinge, an denen's mir hapert.

1)
Beim ersten Durchlauf wird nur ein Stop-Punkt erreicht, der nach 50 ist - ist also blöd, wenn mehrere Timing-Punkte erreicht werden sollen...dann kann ich ja fast gleich onEnterFrame nutzen

2)
Mir ist noch keine rechte Methode eingefallen, um dem Player zu sagen, dass er zB erst diese Methode runterrasseln soll und dann dem nächsten Befehl nachgeht.
Dann wäre's ja im Prinzip erst ein richtiger Timer, wenn ich anweisen könnte, dass per timer(500, 50) ne halbe Sekunde gewartet werden soll und erst dann das nächte geschieht...macht's aber nicht

Aber ich bin am Grübeln, Skyla. :)

Du kannst auch schon direkt was in den Code reinsetzen, bspw.
PHP:
MovieClip.prototype.timer = function (time, interval) {
    timercheck = function () {
        endTime = getTimer();
        diff = endTime - startTime;
        trace(diff);
        if (diff >= time) {
            trace("2 Sekunden gewartet");
            clearInterval(timeInterval);
            delete startTime;
            delete endTime;
            delete diff;
            delete timeInterval;
        }
    }
    startTime = getTimer();
    timeInterval = setInterval(timercheck, interval);
}

timer(2000, 50);
aber dann geht auch schon wieder der prototype-Effekt verloren, denn dann hab ich nix davon, wenn ich eh wieder den ganzen Prototypen verändern muss, um einen Effekt vonstatten gehen zu lassen...

Theoretisch geht's aber so...mir fehlt halt irgendwie der blöde Anstoß dazu, dass erst nach komplettem Ablauf weiteragierrt wird im Script. :)

Geist
 
ok- jetzt versteh ich's. muss zugeben habe das ding ein paar minuten studiert, aber nicht wirklich gecheck, für was es gut sein soll.

aber kannst du nicht verschiedene funktionen mit dem setInterval zeitlich steuern ?
 
Wie stellst du dir das vor?

Die Variante, an die ich noch am ärgsten geglaubt hatte, war den Timer in eine for-Schleife zu stecken, denn wenn die Schleife nicht zuende ist, dann wird folglich nix weitergemacht, aber auch da macht er das, was nach der Schleife kommt, noch eher als den Timer zuende laufen zu lassen...verzwickt...

Geist
 
Also zur Zeit hab' ich's mit 'ner switch-Anweisung laufen, da kann man bspw. nette Flacker-Effekte erzielen. :)

Ich wollte zwar eigentlich Teile meiner HP nicht posten, aber jetzt wo der Effekt mal hier im Spiel ist - schaut's euch mal an
PHP:
MovieClip.prototype.flicker = function (time, interval, timertype) {
	timercheck = function () {
		endTime = getTimer();
		diff = endTime - startTime;
		if (diff >= time) {
			clearInterval(timeInterval);
			delete startTime;
			delete endTime;
			delete diff;
			delete timeInterval;
			switch (timertype) {
				case 1:
					_root.i++;
					themc._visible = false;
					init();
					break;
				case 2:
					_root.i = 1;
					themc._visible = true;					
					init();
					break;
			}
		}
	}
	timerstart = function () {
		startTime = getTimer();
		timeInterval = setInterval(timercheck, interval);
	}
	timerstart();
}
i=1;
function init () {
	flicker(30, 1, i);
}
init();
Frage ist jetzt sicher noch, inwiefern sich das ganze von nem enterFrame-Event unterscheidet - weil ja die Intervalle natürlich nicht alle 1 Sekunde geschehen, sondern bei meinem Rechner bspw. der Player etwas alle 6-10 Millisekunden reagiert und 'ne Aktion bringen kann.

Aber das würde ja bspw. einer Framerate von 100 fps entsprechen - und die kann sich jemand mit grafischen Effekten wohl kaum dauerhaft erlauben... ;)

Noch Meinungen? :)

Geist
 
hi geist

ist sehr schwierig, bei diesem code deine gedanken nachzuvollziehen. ich denke du solltest bei solchen code-brocken mehr mit // arbeiten

grüsse skyla //auf eine anwendung wartend
 
Er wartet auf eine Anwendung?

Nimm einen Quadrat als MC, setz es auf die Bühne und benenn es "themc" und dann pflanzt du den Code von unten in Frame 1 und da ist dann deine Anwendung... ;)

Aber du bekommst auch noch die kommentierte Version plus "updateafterEvent", ja...

Geist
 
Hi ghost, hier noch die optimierte Version:

PHP:
setInterval(function(){theMC._visible=random(2);updateAfterEvent()},40);}

:)


ist glaub ich noch n'zacken schneller als deine. aber bei der länge von deinem script ist das auch kein wunder.

mmmmbrummmmmm !:)
 
Meckerfritze... :p

War doch nur mal 'n Beispiel dafür, wozu der Prototyp gut sein soll...zum Warten halt.

Jetzt überleg' halt mal mit, wie das Ding als Timer zu gebrauchen ist - auch ohne Flackerzeugs. :)

Geist
 
Zurück