J'ai simple boucle de jeu en java:Comportement étrange de la boucle jeu java
public void run(){
while(running){
start = System.nanoTime();
gamePanel.update();
gamePanel.repaint();
elapsed = System.nanoTime() - start;
wait = (TARGET_TIME - elapsed)/1000000;
if(wait < 0){wait = TARGET_TIME;}
try {Thread.sleep(wait);}catch(Exception e) {e.printStackTrace();}
}
}
Maintenant le problème: Quand j'ajouter une sysout dans la mise à jour() sortie « mise à jour » et un en paintComponent() sortie " repeindre », je me le résultat suivant:
updating
updating
updating
updating
updating
(x1000 and more)
repainting
Alors quand je repeindre une fois, le jeu est mise à jour 1000 et plus de fois. Est-ce normal? Je pense que c'est abit étrange, n'est-ce pas? Par exemple, peut faire 1000 pas avec le joueur jusqu'à ce que le jeu le peigne ... Cela signifie que la méthode update() n'attend pas de repeindre la finition? Pourquoi?
Merci!
Edit: Voici le code de mise à jour:
public void update(){
if(moveUp){
changeMapY(map, -map.getSpeed());
}
if(moveDown){
changeMapY(map, map.getSpeed());
}
if(moveRight){
changeMapX(map, map.getSpeed());
}
if(moveLeft){
changeMapX(map, -map.getSpeed());
}
}
Edit 2: Et voici ce changeMap fait: (peut-être c'est le problème)
public void changeMapX(Map map, int amount){
for(int i = 0; i < blocks.length; i++){
for(int j = 0; j < blocks[0].length; j++){
blocks[i][j].addX(amount);
}
}
map.addOffsetx(amount);
}
public void changeMapY(Map map, int amount){
for(int i = 0; i < blocks.length; i++){
for(int j = 0; j < blocks[0].length; j++){
blocks[i][j].addY(amount);
}
}
map.addOffsety(amount);
}
Peut-être que vous avez une boucle dans 'gamePanel.update();', qui affiche 'update' 1000 fois? – Pawel
@Pawel non je n'ai pas. –
Pourrions-nous voir une partie du code dans la mise à jour? (Je suppose que la mise à jour n'est pas non plus récursive?) – Jordan