Salut!
Je suis en train d'apprendre 2-3 trucs par ci par là pour faire un jeu "2D" (2D entre guillemets car il y aura une bonne gestion de la profondeur, mais bon techniquement ça reste de la 2D). Dans ce jeu le timing est très important puisqu'en plus de gérer l'affichage général comme dans beaucoup de jeux, il gèrera en bonne part les actions de chaque créature.
Donc j'ai besoin d'un timer aussi précis et régulier que possible... System.nanoTime() à l'air convenable, seulement j'ai un problème avec Thread.sleep(long ms). Si je veux faire un sleep de 10 millisecondes par exemple, il me sort souvent un écart de 5 millisecondes, soit 15 au lieu de 10!
Parfois c'est 17, parfois 12 ou même (si si!) 10. Un tel écart à chaque nouvelle boucle (le sleep est en fin de boucle while) ça doit vite fausser tout le truc j'imagine.
Bref, y a-t-il un moyen plus précis de faire pause sur le thread ?
J'ai essayé Thread.yield dans une "sous-boucle" while à l'intérieur de la boucle principale.
ça marche bien évidemment, mais ça bouffe tout mon CPU... D'accord, des ressources CPU sont relachées quand un autre programme en a besoin mais j'aimerai autant trouver un autre moyen que de mettre mon processeur en surchauffe constante juste pour un timer. Surtout qu'en relachant des ressources pour d'autres programmes, ça peut rendre la vitesse d'affichage du jeu irrégulière...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 while(TempsPasséInférieurA10Millisecondes) { Thread.yield(); }
Donc, y a-til une technique particulière pour pallier à l'imprécision de Thread.sleep ?
Merci!
Partager