Je développe un jeu 2D simple en Java, tout fonctionne bien. Pour trouver le FPS actualiser/redessiner/mettre à jour, j'ai utilisé currentTimeMillis pour trouver la différence.currentTimeMillis de Java renvoie la (les) valeur (s) négative (s)
Le problème est que currentTimeMillis retourne parfois des valeurs négatives, et la Thread.sleep jetteront exception (java.lang.IllegalArgumentException: délai d'attente est négatif)
Ce que je faisais était de mettre un certain temps dans mon jeu et while currentTimeMillis < = -1 vérifiez à nouveau jusqu'à ce qu'il soit terminé, puis dormez.
Exemple de code:
private void gameLoop(){
// Find FPS
long FPS = 40;
long beginTime = System.currentTimeMillis();
while(beginTime < -1){
beginTime = System.currentTimeMillis();
}
while(!done){
// Sleep
try{
beginTime += FPS;
long currTime = System.currentTimeMillis();
while(currTime < -1){
currTime = System.currentTimeMillis();
}
difference = (beginTime - currTime);
// Should be (currTime - beginTime)
Thread.sleep(difference);
}catch (Exception e){
e.printStackTrace();
}
// RENDER GAME
renderGame();
}
JOptionPane.showMessageDialog(null, "Game Over\nYou Died.");
System.exit(0);
}// end gameLoop()
Quand le jeu commence, cela fonctionne très bien, mais parfois je reçois encore l'exception. Y a-t-il un meilleur moyen? Je pense toujours que c'est étrange que ça retourne une valeur négative.
Je l'ai beaucoup utilisé et je ne l'ai jamais rencontré. Sur quelle plateforme vous êtes? par exemple. Version OS et JVM et fournisseur. –
Mac OS X Leopard, il donne parfois des valeurs négatives. Cela ne se produit pas dans Windows 7. – Millad
vous testez "time <-1" et non "<= -1" ... mais j'ai toujours du mal à croire qu'il retourne des nombres négatifs ... –