J'affiche donc des
tiles :
Cependant lors que j'anime cet affichage, par exemple lorsque je décale l'affichage d'un
tile, le nouvel affichage est décalé d'un pixel.
Ici, pour plus de clarté je n'ai utiliser que des
tiles noirs et blanches (après 18 décalages) :
On y voit bien les rangées de
tiles noirs ou blanches mais tout à gauche l'effet n'est pas voulu... C'est ce qui reste des "sous-couches" disons.
La preuve en est que si je rafraîchi l'affichage j'obtient ce qui suit :
Les "sous-couches" résiduelles des anciens affichages successifs disparaissent.
Je ne sais pas d'où vient ce décalage...
Voilà la méthode
paintComponent() de la classe Panneau qui hérite de
JPanel
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
| public class Panneau extends JPanel
{
/* [...] */
public void paintComponent(Graphics graphic)
{
for (int i = 0; i < this.nbTilesLongeur; i++)
{
for (int j = 0; j < this.nbTilesLargeur; j++)
{
graphic.drawImage
(
this.carte.getTileset().getImage(),
j * this.carte.getTileset().getTailleTile(),
i * this.carte.getTileset().getTailleTile(),
(j+1) * this.carte.getTileset().getTailleTile(),
(i+1) * this.carte.getTileset().getTailleTile(),
(this.carte.getMatrice()[i+this.getY()][j+this.getX()]
% this.carte.getTileset().getNbTilesLargeur())
* this.carte.getTileset().getTailleTile(),
(this.carte.getMatrice()[i+this.getY()][j+this.getX()]
/ this.carte.getTileset().getNbTilesLargeur())
* this.carte.getTileset().getTailleTile(),
(this.carte.getMatrice()[i+this.getY()][j+this.getX()]
% this.carte.getTileset().getNbTilesLargeur()+1)
* this.carte.getTileset().getTailleTile(),
(this.carte.getMatrice()[i+this.getY()][j+this.getX()]
/ this.carte.getTileset().getNbTilesLargeur()+1)
* this.carte.getTileset().getTailleTile(),
this
);
}
}
}
/* [...] */
} |
J'utilise la méthode
drawImage() qui ici prend en entrée:
l'image source ;
la coordonée x du début d'affichage de la sous partie de l'image récupérée ;
la coordonée y du début d'affichage de la sous partie de l'image récupérée ;
la coordonée x de fin d'affichage de la sous partie de l'image récupérée ;
la coordonée y de fin d'affichage de la sous partie de l'image récupérée ;
la coordonée x du début de la sous partie de l'image que l'on souhaite récupérer ;
la coordonée y du début de la sous partie de l'image que l'on souhaite récupérer ;
la coordonée x de fin de la sous partie de l'image que l'on souhaite récupérer ;
la coordonée y de fin de la sous partie de l'image que l'on souhaite récupérer ;
l'objet où tous ça sera affiché.
Grâce à un affichage en console des valeurs calculées et envoyées à cette méthode j'obtient :
x==4
Dx1 Dy1 Dx2 Dy2 Sx1 Sy1 Sx2 Sy2
0, 0, 16, 16, 64, 48, 80, 64
16, 0, 32, 16, 0, 0, 16, 16
32, 0, 48, 16, 64, 48, 80, 64
48, 0, 64, 16, 0, 0, 16, 16
[...]
La première ligne nous apprends qu'aprés 4 décalages (de la largeur d'un
tile à chaque fois), la surface du panneau de coordonées (0,0) à (16,16) prend le
tile du
tileset de coordonées (64,48) à (80,64).
Il devrait donc s'afficher le plus en haut à gauche de la fenêtre...

(Mais il saffiche donc avec 4 pixels de décalages aux coordonnées (4,0) à (20,16))
Merci de m'aider, n'hésitez pas à poser des questions, ce n'est pas forcement très clair...
Partager