Question

J'ai posé une série de questions sur le développement de J2ME Game et, récemment, Neil Coffey a commenté

  

En tant que problème secondaire, voulez-vous VRAIMENT   faire 100 ticks / seconde dans un jeu J2ME?   Comme je pense que sb l’a mentionné,   devrait vraiment aussi dormir à la prochaine   point de réveil souhaité, pas fixe   durée à chaque fois.

Pour une raison quelconque, cette chose est restée gravée dans ma mémoire et maintenant je veux des réponses. De quoi ai-je besoin pour faire dormir mon gameloop jusqu'au point de réveil souhaité , je ne sais pas vraiment où est ce point xD (théoriquement parlant).

Dans l’intérêt des commentaires, il s’agit d’une version simplifiée de mon 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);
        }
    }
}

Merci pour votre aide !!

Était-ce utile?

La solution

Si vous décidez de générer un rendu toutes les 10 millisecondes, vous:

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
}

Je comprends qu'il peut y avoir des problèmes de résolution du minuteur (par exemple, Thread.sleep (10) peut ne pas dormir pendant exactement 10 ms; et System.currentTimeMillis () peut ne pas renvoyer de résultats avec une granularité inférieure à 1 ms). Ceci dépend de la plateforme.

Autres conseils

Il existe un excellent article sur les boucles de jeu ici , si vous ne l'avez pas lu. déjà.

D'après mon expérience dans l'écriture de jeux J2ME, vous voudrez peut-être réduire le nombre de tâches que vous effectuez dans une boucle de jeu, car une boucle de jeu mal écrite peut vider rapidement une batterie décevante de téléphones. Autrement dit, si vous effectuez un rendu au moins 10 millisecondes, vérifiez si quelque chose a changé et si ce n’est pas le cas, ignorez-le.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top