On90
Messages postés2Date d'inscriptionmercredi 17 septembre 2008StatutMembreDernière intervention 7 novembre 2008
-
7 nov. 2008 à 11:18
On90
Messages postés2Date d'inscriptionmercredi 17 septembre 2008StatutMembreDernière intervention 7 novembre 2008
-
7 nov. 2008 à 17:14
Bonjour,
Dans le cadre d'un projet on doit développer un jeu de Worms en 2D avec Java
Je dispose d'une classe héritant de JFrame pour la fenêtre, une héritant de JPanel pour le jeu, d'une classe Personnage et d'une classe Boulet pour un tir.
Ma classe héritant de JPanel gère les évènements clavier et doit, lors d'un appui sur entrée, appeler la méthode tir du Personnage.
Cette méthode tir appelle une méthode dans la classe Boulet afin de faire les calculs de trajectoire et réafficher à chaque nouveau point le boulet.
Cependant, dans cette méthode, j'utilise la méthode repaint() de mon JPanel passé en paramètre.
Mon problème est que cette méthode, censée être appelée une dizaine de fois pour afficher la nouvelle position du boulet, n'est prise en compte qu'à la fin du calcul des trajectoires...
Je ne trouve pas de solution pour afficher le boulet à chaque nouveau point.
cs_jojolemariole
Messages postés519Date d'inscriptionmercredi 21 mars 2007StatutMembreDernière intervention19 décembre 201625 7 nov. 2008 à 14:31
Salut,
Oui, je pense que tu affrontes là un des problèmes les plus chiants quand on fait des animations avec Java. Il te faut un thread à part pour appeler repaint().
par exemple :
public class Repainter extends Thread {
private Component componentToRepaint;
public Repainter(Component componentToRepaint) {
this.componentToRepaint = componentToRepaint;
}
public Component getComponentToRepaint() {
return componentToRepaint;
}
public void run() {
while(true) {
sleep(20);
componentToRepaint.repaint();
}
}
}
C'est un vachement simplifié, mais c'est l'idée de base.
Tu n'as qu'à instancié un Repainter, en lui passant en paramètre ta JFrame, puis tu fais start()