Bonjour,

Je vais essayer d'expliquer au mieux mon problème tout en ajoutant que la partie de code intéressante.

Je développe un labyrinthe sur lequel je vais déplacer un personnage.
Je souhaite représenter ce personnage par une image.

Voici mon 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
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
114
115
116
117
118
119
120
121
122
123
 
public class Labyrinthe extends JPanel implements Runnable {
private int numero;
	private Monde monde;
	private ParamsJeu paramsJeu;
 
public void paintComponent(Graphics g) {
		super.paintComponent(g);
		monde.dessine(g);
	}
 
public void prepare() {
		// niveau 1
		if (paramsJeu.getNiveau() == 1) {
 
		}
		// niveau 2
		else if (paramsJeu.getNiveau() == 2) {
			// premier labyrinthe
			if (numero == LABYRINTHE_1) {
				this.requestFocus();
 
 
				paramsJeu.getPerso1().dessine(getGraphics());
 
 
				addKeyListener(new KeyAdapter() {
					public void keyPressed(KeyEvent e) {
						if (e.getKeyCode() == KeyEvent.VK_LEFT) {
							paramsJeu.getPerso1().deplaceVers(monde, paramsJeu.getPerso1().getPosX(), paramsJeu.getPerso1().getPosY()-1*Monde.getTaillePixel());
							paramsJeu.getPerso1().dessine(getGraphics());
						} else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
							paramsJeu.getPerso1().deplaceVers(monde, paramsJeu.getPerso1().getPosX(), paramsJeu.getPerso1().getPosY()+1*Monde.getTaillePixel());
							paramsJeu.getPerso1().dessine(getGraphics());
						} else if (e.getKeyCode() == KeyEvent.VK_UP) {
							paramsJeu.getPerso1().deplaceVers(monde, paramsJeu.getPerso1().getPosX()-1*Monde.getTaillePixel(), paramsJeu.getPerso1().getPosY());
							paramsJeu.getPerso1().dessine(getGraphics());
						} else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
							paramsJeu.getPerso1().deplaceVers(monde, paramsJeu.getPerso1().getPosX()+1*Monde.getTaillePixel(), paramsJeu.getPerso1().getPosY());
							paramsJeu.getPerso1().dessine(getGraphics());
						}	
					}
				});
			}
			// deuxieme labyrinthe
			else {
				addMouseListener(new MouseAdapter() {
					public void mousePressed(MouseEvent e) {
						// TODO
					}
					public void mouseReleased(MouseEvent e) {
						// TODO
					}
				});
				addMouseMotionListener(new MouseMotionAdapter() {
					public void mouseDragged(MouseEvent e) {
						// TODO
					}
				});
			}
		}
		// niveau 3
		else {
 
		}
	}
 
public class Personnage {
 
	// coordonnees initiales du personnage
	private static int initX = 19;
	private static int initY = 6;
 
	private String nom;
	private int oldX;
	private int oldY;
	private int posX;
	private int posY;
	private Image image;
 
	private Personnage() {
		oldX = posX = initX * Monde.getTaillePixel();
		oldY = posY = initY * Monde.getTaillePixel();
	}
 
	public Personnage(String nom, String fichierImage) {
		this();
		this.nom = nom;
		this.image = Toolkit.getDefaultToolkit().getImage(fichierImage);
	}
 
	// dessine un carre blanc a l'ancienne position
	// dessine l'image a la nouvelle position
	public void dessine(Graphics g) {
		g.setColor(Color.RED);
		g.fillRect(oldY, oldX, Monde.getTaillePixel(), Monde.getTaillePixel());
		g.drawImage(image, posY, posX, null);
	}
 
// newX, newY : coordonnees absolues (multipliees par getTaillePixel())
	public void deplaceVers(Monde m, int newX, int newY) {
		// les coordonnees reelles se referent aux indices de la matrice Monde
		// si les nouvelles coordonnees chevauchent deux cases de taille getTaillePixel(), on teste la matrice sur la deuxieme case
		int realX = newX % Monde.getTaillePixel() == 0 ? newX / Monde.getTaillePixel() : newX / Monde.getTaillePixel() + 1;
		int realY = newY % Monde.getTaillePixel() == 0 ? newY / Monde.getTaillePixel() : newY / Monde.getTaillePixel() + 1;
 
		if (realX >= 0 && realX < Monde.getNbL() && realY >= 0 && realY < Monde.getNbC()
				&& !m.isMurAt(realX, realY)) {
			oldX = posX;
			oldY = posY;
			posX = newX;
			posY = newY;
		}
	}
 
	public int getPosX() {
		return posX;
	}
 
	public int getPosY() {
		return posY;
	}
}
Mon problème est que lors de l'appel dans prepare() de paramsJeu.getPerso1().dessine(getGraphics()); il m'affiche mon carré rouge (en fait il sera blanc par la suite pour effacer l'ancienne position avant le déplacement) mais ensuite n'affiche pas l'image.

Je ne comprends donc pas pourquoi lors de l'affichage du perso à sa position initiale, seul le carré rouge s'affiche et n'est pas écrasé par l'image. Il faut que je commence à déplacer mon perso avec les touches pour que l'image s'affiche à la place du carré rouge.

Merci d'avance pour vos réponses.