Frage

Ich habe eine Reihe von Fragen getan über J2ME Spiel zu entwickeln und in einem kürzlich ein, Neil Coffey kommentiert

  

Als Neben Issue-- tun Sie wirklich wollen   100 Ticks / Sekunde in einem J2ME Spiel zu tun?   Wie ich glaube, sb Sie erwähnt hat,   schlafen wirklich auch auf die nächste sollte   gewünschte Wake-up-Punkt, kein fester   Dauer jedes Mal.

Aus irgendeinem Grunde, dass, was in meinem Kopf stecken und jetzt will ich die Antworten, was ich brauche, um meinen gameloop Schlaf auf den gewünschten Weck- Punkt zu machen, ich weiß wirklich nicht, wo ist der Punkt, xD (theoretisch).

Aus Gründen des Feedbacks, das ist eine vereinfachte Version meiner gameloop:

public void run() {
    Graphics g = this.getGraphics();
    while (running) {
        long diff = System.currentTimeMillis() - lastLoop;
        lastLoop = System.currentTimeMillis();
        input();
        this.level.doLogic();
        render(g, diff);
        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            stop(e);
        }
    }
}

Danke für Ihre Hilfe !!

War es hilfreich?

Lösung

Wenn Sie sich entscheiden, dass Sie alle 10 Millisekunden machen möchten, dann sind Sie:

loop {
  - record current time; render
  - do input/logic
  - check the current time, and calculate elapsed time
    - if less than 10 ms has elapsed, calculate the remaining time (10 millis - elapsed time); sleep for this duration
}

Ich verstehe, dass es Probleme mit Timer-Auflösung sein kann (zum Beispiel Thread.sleep (10) kann genau 10 ms nicht schlafen, und System.currentTimeMillis () nicht zurückgehen mit einer Granularität von bis zu 1 ms). Dies ist plattformabhängig.

Andere Tipps

Es gibt einen ausgezeichneten Artikel über Spiel-Loops hier , wenn Sie es nicht gelesen haben, bereits.

Aus meiner Erfahrung J2ME Spiele zu schreiben, werden Sie minimieren wollen, wie viel Sie alles in einem Spiel Schleife tun, als schlecht geschriebene Spielschleife kann ein Telefon mickrig Batterie schnell entleeren. Das heißt, wenn Sie jemals 10 Millisekunden machen, stellen Sie sicher, um zu überprüfen, ob etwas geändert hat, und wenn nicht, es überspringt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top