Bonjour, mon programme est un logiciel de Tower Defense qui nécessite un bouton pour lancer une vague de monstre. Cette vague de monstre est géré par un javax.swing.timer qui fait avancer les monstre toutes les 100 millisecondes. Je possède une fonction lancerVague(int i) dans ma classe TDGraphic qui lance la vague numero i. Ce programme marche parfaitement lorsque je lance en brut la fonction lancerVague(0) depuis mon TDGraphic dans le main.
Malheuresement, lorsque j'essaye de lancer par un MouseAdapter (lorsque la souris cliquera) le lancerVague(0) cela ne marche plus.
Pour le code je l'ai simplifié pour la compréhension du problème mais je précise que je l'ai testé simplifier il ne marche pas non plus.
dans le class TDGraphic (tdG)
dans le class TowerDefense (td)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 public void lancerVague(int i){ System.out.println("TEST2"); td.lancerVague(i); } class EcouteurSouris extends MouseAdapter{ private TDGraphic tdG; private boolean etatVague=false; public EcouteurSouris(TDGraphic t){ tdG=t; } public void mouseClicked(MouseEvent e){ //Permet de lancer une vague si clique sur le bouton Lancer Vague (BoutLV) System.out.println("TEST"); tdG.lancerVague(0); System.out.println("TESTFin"); } }
dans le class Vague (myVague)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public void lancerVague(int i){ System.out.println("TEST3"); myVague[i].lancerVague(); System.out.println("TEST15"); }
Le programme devrait normalement afficher (ce qu'il fait en ligne de commande brut) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 public Vague(TowerDefense td){ timer=new Timer(100,new EcouteurTimer(this)); } public void lancerVague(){ System.out.println("TEST4"); timer.start(); System.out.println("TEST5"); while (timer.isRunning()){} } class EcouteurTimer implements ActionListener{ private Vague vague; public EcouteurTimer(Vague v){ vague=v; } public void actionPerformed(ActionEvent event){ System.out.println("TEST6"); } }
- Test
- Test2
- Test3
- Test4
- Test5
- Test6
- Test6
... et TEST6 jusqu’à arriver à la fin du compteur
Quand je test le programme s’arrête à TEST5. Je ne comprend donc pas pourquoi les impulsion du timer ne fonctionne pas.
Merci d'avoir lu mon problème (peu être un peu long mais je préfère bien l'expliquer) et si vous remarquer une erreur ou mieux la source de mon problème je suis tout à votre écouter.
Partager