Um eine allgemeinere Antwort zu geben - statt einer Schleife möchten Sie eine Folge von zukünftigen Aufgaben planen, die jeweils eine Iteration oder einen Schritt Ihres AI-Codes (oder eines anderen Hintergrundprozesses) ausführen.
dynamic doSomething(_) {
print('Doing something ...');
if(!stop) {
new Future.delayed(delay,(){}).then(doSomething);
}
return null;
}
main() async {
doSomething(null);
}
Obwohl ich das nicht empfehlen tun:
können Sie die Schrittaufgabe selbst rekursiv planen haben. Es ist schwierig zu steuern - der Schrittcode muss eine Flag-Variable prüfen, um zu sehen, ob sie fortfahren oder anhalten soll und dass sie frei läuft.
void doSomething(Timer timer) {
print('Doing something ...');
}
main() async {
new Timer.periodic(delay, doSomething);
}
Diese gedrosselt wird mit einer konstanten Geschwindigkeit und einen gleichförmigen Zeitschritt, und ist leichter (cancel()
auf dem Timer nennen) zu stoppen:
Alternativ können Sie ein Timer
verwenden.
Ein weiterer Ansatz könnte sein, mit dem Browser des Zieh Refresh-Zyklus zu synchronisieren, indem zukünftigem Animationsrahmen s anfordernden:
import 'dart:html';
doSomething(num delta) {
print('Doing something ...');
window.animationFrame.then(doSomething);
}
void main() {
window.animationFrame.then(doSomething);
}
Zeitschritte sind nicht konstant, sondern Sie die Zeit Delta bekommen. Der Vorteil dieses Ansatzes besteht darin, dass Animationsrahmen-Futures nicht geplant werden, wenn das Browserfenster ausgeblendet ist.
Siehe How do I drive an animation loop at 60fps with Dart?
Das sind sehr einfache Beispiele. Das Einrichten geeigneter Hintergrundprozesse für die Physiksimulation und AI in Webspielen ist tatsächlich überraschend (zumindest für mich) nicht-trivial. Hier sind zwei Ressourcen, die ich hilfreich fand.
http://gameprogrammingpatterns.com/ - ein nettes kostenloses Online-Buch von Spiel Programmierung Muster. http://gameprogrammingpatterns.com/game-loop.html - Kapitel über Spiel-Loops.
http://gafferongames.com/game-physics/fix-your-timestep/ - Teil einer Reihe von Artikeln über Physik-Simulation in Spielen.
Warum wollen Sie in einer Schleife zählen wan't? Könnten Sie nicht einfach die Zeit messen, in der Sie anfangen zu zählen, bis das Klicken passiert ist? –
Ich möchte in der Lage sein, einige Verarbeitungsabschnitte in einer While-Schleife auszuführen - die Aufgabe wird nach Wörtern in einem Stapel zufälliger Buchstaben suchen. Dies muss gestoppt werden, wenn der Gegner sich bewegt, so dass ich den Wert von OK in diesem Moment von wahr zu falsch ändern kann. –
Ich habe immer noch keine Ahnung, was Sie mit "Kontrolle einer Weile Schleife" meinen. Ihre Generatorfunktion macht Ihren Code trotzdem ereignisgesteuert. 'award sleep()' fügt einige zusätzliche Zyklen für den Browser-Hauptthread hinzu. Ich weiß nicht, ob das nützlich/notwendig ist. –