Edit: Das macht viel mehr Sinn für mich jetzt, dass ich einen Schritt vom Code entfernt habe, danke für die Hilfe.Gameloop für j2me "Turn-based" Spiel
Gerade gefunden Stapelüberlauf den anderen Tag durch Coding Horror und es sieht fantastisch aus. Stellen Sie sich vor, dass ich die Community nach einem Problem frage, das ich gerade versuche herauszufinden.
Ich entwickle ein Roguelike sortof Spiel mit j2me für Midp 2.0 Handys. Das Projekt befindet sich immer noch in den Grundphasen der Entwicklung, während ich herausfinde, wie es funktionieren wird. Der Teil, an dem ich gerade festhalte, hat mit Threading zu tun.
Das Spiel hat eine benutzerdefinierte HaxCanvas
Klasse, die GameCanvas und implementiert runnable erweitert. Die Methode run ruft repaint() auf und ruht dann für 50 ms, was zu einer Bildrate von 20 FPS führt. Dies ermöglicht mir, den Rest des Spiels zu schreiben, ohne dass ich Repaint überall anbringen muss, und sollte später Animationen und Effekte einfacher machen. (zumindest in der Theorie).
Der Spielfluss wird von einer GameManager-Klasse kontrolliert, die alle NPCs auf der Karte durchläuft, bis sie an der Reihe ist. An diesem Punkt muss ich eine Eingabe erhalten, damit der Spieler sich bewegen und/oder Dinge angreifen kann. Ich rief ursprünglich gameManager.runUntilHeroTurn()
in der keyPressed
Methode meiner HaxCanvas
. Nach dem Lesen von j2me-System-Threads wurde mir jedoch klar, dass es eine schlechte Idee ist, eine Methode mit dem Potenzial für eine Weile in einem Callback einzusetzen. Allerdings muss ich keyPressed verwenden, um Eingabe-Handeling zu tun, da ich Zugang zu den Zifferntasten benötige, und getKeyStates()
unterstützt dies nicht.
Soar meine Versuche, meine Gameloop in einen eigenen Thread zu setzen, haben zu einem Desaster geführt. Eine seltsame "nicht abgefangene ArrayIndexOutOfBoundsException" ohne Stack-Trace erscheint, nachdem das Spiel mehrere Runden gelaufen ist. So
Ich nehme meine Frage ist:
Für ein Spiel, in J2ME „basiert drehen“, was ist der beste Weg, um das Spiel Schleife zu implementieren, für die Eingabe erlaubt nur handeling, wenn es die Umdrehung des Spielers?
Übrigens, gute Frage. +1 – Fostah