Jeu type Worms en Java, problème avec repaint()

On90 Messages postés 2 Date d'inscription mercredi 17 septembre 2008 Statut Membre Dernière intervention 7 novembre 2008 - 7 nov. 2008 à 11:18
On90 Messages postés 2 Date d'inscription mercredi 17 septembre 2008 Statut Membre Derniè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.

3 réponses

cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
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()

Bonne chance!
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
7 nov. 2008 à 14:33
J'utilise Opera 9.6, y'a un problème avec pour la tabulation? depuis que je poste avec Opera, il n'y a plus de tabulation dans mes messages...
0
On90 Messages postés 2 Date d'inscription mercredi 17 septembre 2008 Statut Membre Dernière intervention 7 novembre 2008
7 nov. 2008 à 17:14
Merci de ton aide tout fonctionne parfaitement :)
0
Rejoignez-nous