Domanda

Ho fatto una serie di domande sullo sviluppo di J2ME Game e in una recente Neil Coffey ha commentato

  

Come problema secondario, vuoi davvero   fare 100 tick / secondo in un gioco J2ME?   Come penso che abbia menzionato sb, tu   dovrebbe davvero dormire anche a quello successivo   punto di sveglia desiderato, non fisso   durata ogni volta.

Per qualche ragione, quella cosa mi è rimasta impressa nella mente e ora voglio le risposte, di cosa ho bisogno per far dormire il mio gameloop nel punto di sveglia desiderato , non lo so davvero dov'è quel punto xD (teoricamente parlando).

Per motivi di feedback, questa è una versione semplificata del mio 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);
        }
    }
}

Grazie per l'aiuto !!

È stato utile?

Soluzione

Se decidi di voler eseguire il rendering ogni 10 millisecondi, allora:

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
}

Comprendo che potrebbero esserci problemi con la risoluzione del timer (ad esempio, Thread.sleep (10) potrebbe non dormire esattamente per 10 ms; e System.currentTimeMillis () potrebbe non restituire risultati con granularità fino a 1 ms). Questo dipende dalla piattaforma.

Altri suggerimenti

Esiste un eccellente articolo sui loop di gioco qui , se non l'hai ancora letto già.

Dalla mia esperienza di scrittura di giochi J2ME, ti consigliamo di ridurre al minimo la quantità di azioni che fai in un loop di gioco, poiché un loop di gioco scritto in modo scadente può scaricare rapidamente una batteria scadente del telefono. Cioè, se esegui il rendering ogni 10 millisecondi, assicurati di controllare se qualcosa è cambiato e, in caso contrario, saltalo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top