Pbme (ou bug JVM???) avec Java en 2D

Pbme (ou bug JVM???) avec Java en 2D - Java - Programmation

Marsh Posté le 07-07-2005 à 13:28:44    

Bonjour je ne suis pas du tout un expert java, donc je soupçonne une énorme c.... de ma part  :whistle: , mais il m'arrive un phénomène assez bizarre, avec Java2D j'explique:
 
j'ai un petit jeu tout simple: avec gameLoop() comme boucle principale, qui efface l'écran, appelle une méthode updateGame() qui met à jour les variables et prépare l'affichage des sprites, puis gameLoop affiche le tout, ca donne quelque chose comme ça:
 

Code :
  1. public void gameLoop()
  2. {
  3.      while(gameRunning)
  4.      {
  5.           // on efface tout
  6.           g = (Graphics2D) strategy.getDrawGraphics();
  7.           g.setColor(Color.black);
  8.           g.fillRect(0,0,800,600);
  9.           // met a jour les variables du jeu
  10.           updateGame();
  11.           // affiche le tout
  12.           g.dispose();
  13.           strategy.show();
  14.      }
  15. }


 
et à ma grande surprise si je ne ralentit pas l'execution de gameLoop() des bugs apparaissent dans mon jeu, et la méthode updateGame() semble être appellée plusieurs fois en même temps à certains moment :ouch: (d'après les traces que j'ai obtenues).
 
Si je ralenti la méthode gameLoop() avec un Thread.sleep() par exemple ou mieux une grosse boucle for() ;) à la fin de ma boucle while() tout marche parfaitement  :heink: .
Voila mon programme n'est pas découpé en thread ou autre donc je ne comprend pas...tout devrais s'executer à la suite non ?  :??:  
 
j'ai vu quelque part sur le net que la JVM 1.5 pourrait être buggé au niveau du BufferStrategy, donc la question finale :
 
Est-ce que quelqu'un sait quelque chose ? ou éventuellement peut me dire qu'est-ce que j'ai mal fait ?

Reply

Marsh Posté le 07-07-2005 à 13:28:44   

Reply

Marsh Posté le 07-07-2005 à 14:53:20    

Citation :

des bugs apparaissent dans mon jeu


quel genre de bugs ?

Reply

Marsh Posté le 07-07-2005 à 15:18:02    

Pour être plus clair, la méthode "updateGame()" fait éxecuter a des personnages une liste d'ordre pré-établis.
 
Le problème c'est que certains ordres passent parfois en double quand je ne ralenti pas ma méthode d'affichage du coup certain persos font des mouvements en trop: ca c'est le bug apparent (je signale que quand je ralenti cette méthode,ca n'arrive jamais).
 
J'ai mis des traces dans tous les sens (je n'utilise pas d'IDE)et j'en arrive a la conclusion qu'apparement ma méthode updateGame() est parfois appelé simultanement et le perso execute le même ordre 2 fois en même temps.Bien sur ca me parait bizarre, mais je m'interroge vu que j'ai trouvé une "info" sur le net (cf plus haut), quelqu'un peut-il me donner son avis ?

Reply

Marsh Posté le 07-07-2005 à 15:29:28    

<peut-être une connerie>
Et en la rendant "synchronised" ?
</peut-être une connerie>


---------------
Soyons ouverts d'esprit, mais pas au point de laisser notre cerveau s'enfuir.
Reply

Marsh Posté le 07-07-2005 à 15:41:21    

En fait :
 

Citation :

Voila mon programme n'est pas découpé en thread ou autre donc je ne comprend pas...tout devrais s'executer à la suite non ?  :??:


 
Si je fait pas explicitement du multithread, on en fait pas dans mon dos quand même ?  :??:

Reply

Marsh Posté le 07-07-2005 à 15:45:02    

Ce ne serait pas tout simplement un problème de vsync ?  
 
Edit : je veux dire que tu passerais peut-être 2 fois dans ta fonction avant que l'écran ne se raffraichisse (ce qui serait évidemment altéré par la présence d'une fonction pour ralentir l'appli)


Message édité par theshockwave le 07-07-2005 à 15:46:12
Reply

Marsh Posté le 11-07-2005 à 20:54:47    

Ca y est j'ai trouvé, rien a voir avec un bug JVM ou je sais pas quoi(remarque je m'en doutais) :lol: .
 
Juste un traitement un peu expéditif de ma part des entrées au clavier qui lisait plusieurs fois la touche déclanchant mon animation, voila.Merci quand même pour vos réponses.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed