2009-06-18 9 views
1

Je l'ai fait une série de questions sur le développement J2ME jeu, et dans un récent, Neil Coffey a commentétemps efficace Gameloop dans J2ME

Comme un côté faire Issue-- vous voulez vraiment faire 100 ticks/seconde dans un jeu J2ME? Comme je pense sb a mentionné, vous devriez vraiment dormir aussi à l'autre point de réveil souhaité, pas un fixe durée à chaque fois.

Pour une raison quelconque, cette chose coincé dans mon esprit et maintenant je veux des réponses, que dois-je faire mon sommeil gameloop au Je ne sais pas vraiment le point réveil souhaité, où est ce point xD (théoriquement parlant).

Par souci de rétroaction, ceci est 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 !!

Répondre

1

Si vous décidez que vous voulez rendre toutes les 10 millisecondes, alors 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 avec la résolution de la minuterie (par exemple, Thread.sleep (10) ne peut pas dormir exactement 10 ms, et System.currentTimeMillis() ne peuvent pas obtenir des résultats avec une granularité jusqu'à 1 ms). Ceci dépend de la plateforme.

3

Il y a un excellent article sur les boucles jeu here, si vous avez pas déjà lu.

De mon écriture expérience jeux J2ME, vous voulez minimiser combien vous faites quoi que ce soit dans une boucle de jeu, comme une boucle de jeu mal écrit peut rapidement vider une batterie de téléphones chétif. Autrement dit, si vous rendant jamais 10 millisecondes, assurez-vous de vérifier si quelque chose a changé, et sinon, l'ignorer.