hi,
Ich sehe auch nach längerem Grübeln keine Möglichkeit, die Methoden "SetTimeout()" und "SetInterval()" einzusetzen,
Ich sehe hingegen in Javascript eigentlich keine Möglichkeit, _ohne_ diese Methoden eine "Wartezeit" zu realisieren - außer dem absoluten "Holzhammer", nach jeder abgearbeiteten Funktion mittels alert() eine Ausgabe zu machen, die dann erst wieder weggeklickt werden muss.
weil das Problem darin besteht, dass für die Programmierung von Niki Funktionen bereitgestellt werden müssen, die hinsichtlich der Sequenzierung ihrer Nutzung tolerant sind ("vorwaerts()", "dreheLinks()", "nimmAuf()", "gibAb()").
Oh Mann, "Niki" ist bei mir auch schon etwas länger her :-)
Aber wenn ich mich recht erinnere, ist es für mich als Schüler doch erst mal vollkommen egal, _wie_ diese Funktionen intern arbeiten, oder?
Sie sind quasi "black boxes", die ich aneinanderreihe, deren Innenleben mich aber nicht weiter zu interessieren hat, ist das korrekt?
Über einen konstruktiven Lösungsvorschlag würden sich meine Schüler(innen) und ich sehr freuen.
Falls obige Annahme korrekt ist - dann könntest du die "Niki-Funktionen" wie vorwaerts(), dreheLinks() etc. ja eventuell so umschreiben, dass sie gar nicht mehr _direkt_ die Aktion ausführen - sondern dass sie zunächst einmal nur einen Eintrag für den jeweiligen Arbeitsschritt in einem Array hinterlegen.
_Anschließend_ durchläufst du dann dieses Array, und benutzt dabei setTimeout(), um immer nach x Millisekunden den nächsten im Array gespeicherten Arbeitsschritt durchzuführen.
Das könnte z.b. so aussehen, dass sich die Funktion vorwaerts() nur mit dem Text "vorwaerts()" in einem neuen Array-Element verewigt, und sonst nichts tut.
(Ich weiß nicht mehr, wie war das bei Niki, nahmen diese Funktionen auch Parameter entgegen, so á la vorwaerts(5)? Wenn ja, müsste dieser natürlich ebenfalls noch im Array abgelegt werden.)
Wenn du jetzt das Array durchläufst, weißt du an Hand des Textes "vorwaerts()", dass du jetzt die _richtige_ Vorwaerts-Funktion aufrufen musst - nennen wir sie mal gehe_vorwartes(), die dann auch wirklich den Niki einen Schritt in der aktuellen Richtung nach vorne bewegt.
Das sollte sich ja bspw. an Hand eines switches realisieren lassen,
switch(deinArray[Schrittzähler]['Funktionsname']) {
case "vorwaerts()":
gehe_vorwaerts();
break;
case "...":
...;
}
(Klar, statt des switches könnte man hier ggf. auch eval() verwenden - eval("gehe_"+deinArray[Schrittzähler]['Funktionsname']) - aber wir wollen ja nicht Schüler, die gerade Javascript lernen, durch sowas vom Weg der Tugend abbringen, oder? ;-)
Wenn auch noch ein Parameter benötigt wird, könnte der z.B. in deinArray[Schrittzähler]['Parameter'] hinterlegt worden sein, und dann wird im case halt
gehe_vorwaerts(deinArray[Schrittzähler]['Parameter']);
aufgerufen.
Hier ist die Verknüpfung zu meiner JavaSkript-Anpassung von Niki:
Habe ich mir jetzt zunächst mal nicht angesehen, sondern erst mal so meinen Vorschlag geschildert, wie man so etwas ggf. umsetzen könnte - was hältst du davon?
gruß,
wahsaga
/voodoo.css:
#GeorgeWBush { position:absolute; bottom:-6ft; }