Bonjour,
Je fais un petit jeu et à la fin de la partie je souhaiterais une petite animation qui remplit progressivement le fond d'écran de "Bravo !" mais que le fond, pas sur les boutons. C'est bien là mon problème, mes boutons sont surchargés par les écritures, on ne les voit plus.
Autre chose : Cette animation s'arrête lorsqu'on clique n'importe où sur l'écran.
J'obtiens bien ce résultat si j'abandonne l'animation : en mettant la boucle à l'intérieur de paintComponent. Mais comment y ajouter la thread et voir progressivement les "Bravo !" s'inscrire un par un progressivement ?
Je ne peux pas non plus faire une animation ponctuée de repaint() car sinon je n'ai que le dernier "Bravo !" et je perds tous les précédents.
Je vous joins mon code (une version très très simplifiée).
Merci pour toute l'aide que vous voudrez bien m'apporter.
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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113 public class essai extends JApplet { private static final long serialVersionUID = 1L; class MaThread extends Thread { //=========== Classe MaThread int r = 0, x = 0, y = 0; boolean finir; JPanel panneauDisque; MaThread(JPanel panneauDisque) { //----------- Constructeur this.panneauDisque = panneauDisque; } synchronized void stopper() { //------------ Pour arreter la Thread finir = true; notify(); } public void run() { //------------------- Démarrage de la Thread int L = panneauDisque.getSize().width; int H = panneauDisque.getSize().height; Graphics g = panneauDisque.getGraphics(); Graphics2D g2d = ( Graphics2D ) g.create(); g2d.setFont( new Font( "Tiresias PCFont Z", Font.BOLD, 40 ) ); finir = false; //Animation = Ecrire pleins de "Bravo !" dans le fond d'écran //Cette Animation s'arrête si on clic sur l'écran (finir -> false) for (int i = 0; i < 30; i++) { try { sleep(200); } catch (InterruptedException exc) {} if (finir) break; g2d.setColor(new Color((528424*i)%Integer.MAX_VALUE)); //variation de couleur r += 10 ; x = (int) (L/2 + r*Math.cos(i*Math.PI/6)); //coordonnées selon une spirale y = (int) (H/2 - r*Math.sin(i*Math.PI/6)); g2d.drawString( "Bravo !", x, y ); } } // Fin de la méthode run de la thread } //Fin de la classe MaThread class PanneauCentre extends JPanel { //== Classe PanneauCentre private static final long serialVersionUID = 1L; JButton boutonGagné; JButton[] pion = new JButton[15]; boolean bravo = false, finir = false; MaThread thread = null; JPanel panneau; public PanneauCentre () { //------------------- Constructeur setLayout(new FlowLayout()); //Remplissage de la grille avec des boutons et des labels for (int k=0 ; k<pion.length; k++) { pion[k] = new JButton("bouton"+k); pion[k].setEnabled(false); add(pion[k]); JPanel vide = new JPanel(); add(vide); } boutonGagné = new JButton ("Valider la partie"); add(boutonGagné); this.panneau = this; jeu(); //on lance le jeu } // Fin du constructeur PanneauCentre public void paintComponent(Graphics g) { //----- Toile de fond paintComponent int L = this.getSize().width; int H = this.getSize().height; super.paintComponent(g); Graphics2D g2d = ( Graphics2D ) g.create(); /* * (diverses instructions) */ } // Fin de PaintComponent public void jeu() { //----------------- Une partie de jeu /* * le déroulement du jeu (diverses instructions) */ boutonGagné.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { //validation de la partie bravo = true; if ((thread == null)||(!thread.isAlive())) { thread = new MaThread(panneau); thread.start(); // animation } getContentPane().addMouseListener(new MouseAdapter(){ public void mousePressed(MouseEvent e){ //arrêt de l'animation dès qu'on clique sur l'écran if (thread != null) thread.stopper(); thread = null; } public void mouseReleased(MouseEvent e){ if (thread != null) thread.stopper(); thread = null; } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } }); } }); } //Fin de la méthode "jeu" }//Fin de la classe PanneauCentre public void init() { this.setSize(250, 250); JPanel panneau = new PanneauCentre(); getContentPane().add(panneau); } }
Partager