Bonjour à tous,
Cela fait un bon moment que je suis coincé sur un shoot'em up.Peut-être pourriez vous me donner un coup de main.
La méthode de paintComponent de Joueur n'est pas appelé par repaint().
Console :
vaisseau:10ms CAS 1
vaisseau:10ms CAS 2
vaisseau:10ms CAS 3
Voila un bout de code:
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 public class Terrain extends JPanel { ... private void initComponents() { setLayout(null); ... timerJ_ = new Timer(10, new DeplacerJoueur(this)); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; g2d.drawString(joueur_.getArme() + " Vies: " + nbVies_ + " Score: " + score_, 480, 30); // Toolkit.getDefaultToolkit().sync();g.dispose(); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public class DeplacerJoueur implements ActionListener { private Terrain t_; public DeplacerJoueur(Terrain t) { t_ = t; } @Override public void actionPerformed(ActionEvent evt) { // tick de timer System.out.println("vaisseau:10ms CAS 1"); t_.getJoueur().deplacer(); System.out.println("vaisseau:10ms CAS 2"); t_.getJoueur().repaint(); System.out.println("vaisseau:10ms CAS 3"); }A la base, j'affichais tout dans paint() de Terrain mais j'ai remplacé par paintComponent() dans chaque objet affiché.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public class Joueur extends Vaisseau {// Vaisseau herite de JComponent) @Override public void paintComponent(Graphics g) { super.paintComponent(g); System.out.println("repaint fonctionne"); Graphics2D g2d = (Graphics2D) g; setVisible(true); setPreferredSize(new Dimension(50, 19)); g2d.drawImage(img_, (int) hg_.getX(), (int) hg_.getY(), this); g2d.setColor(Color.blue); } }
Juste pour tester, lorsque dans le paintComponent de Terrain je met joueur_.repaint() ca n'entre pas dans la méthode.
Cependant joueur_.paintComponent(g) fonctionne (meme si ce n'est pas recommandé et que c'est dans DeplacerJoueur que je veut le mettre).
Je me dit que peut-être paintComponent ne sait pas où se dessiner et paintComponent fonctionne grâce au parametre g ?
Qu'en dîtes-vous ? Merci
Partager