Pour gérer l’événement de collision entre deux éléments d’un graphisme (exemple la bille et le lutin), un dessin est préférable à un long discours :
Ce qui donne en Java :
//-- Animation du Sprite
tabReturn=sprite.onDessin(canvas);
//-- Récupération des coordonnées du Sprite
xSG=tabReturn[0];
ySG=tabReturn[1];
xSD=tabReturn[2];
ySD=tabReturn[3];
//-- Affichage des coordonnées du sprite
Paint paint = new Paint();
paint.setTextSize(16);
canvas.drawText("x="+xSG+" y="+ySG+" xD= "+xSD+" yD="+ySD, 20, 20, paint);
//-- On place le Bitmap (le centre placé sur x et y)
canvas.drawBitmap(Bille, x - (Bille.getWidth()/2), y - (Bille.getHeight()/2), null);
//-- x = endroit ou on a touché l'écran et xG = coin gauche du BitMap Bille
xG=(int) (x - (Bille.getWidth()/2));
yG=(int) (y - (Bille.getHeight()/2));
xD=(int) (x + (Bille.getWidth()/2));
yD=(int) (y + (Bille.getHeight()/2));
//-- Affichage des coordonnées de la bille
canvas.drawText("x="+xG+" y="+yG+" xD="+xD+" yD="+yD, 20, 40, paint);
//-- test de collision
if ((xD>xSG && xD<xSD) && ((yG>ySG && yG<ySD) || (yD>ySG && yD<ySD)) ||
(xG>xSG && xG<xSD) && ((yG>ySG && yG<ySD) || (yD>ySG && yD<ySD)))
//-- Explosion !
{//explosion.onDessin(canvas);
canvas.drawText("EXPLOSION !", 20, 60, paint);
}
else
canvas.drawText(" ", 20, 60, paint);
Avec dans la classe Sprite (pour récupérer les coordonnées ) :
public int[] onDessin(Canvas canvas) {
//-- Actualisation de la position du Sprite
update();
//-- Positionnement dans le SpriteSheet pour choisir le Sprite correspondant à la direction
int srcY= FrameDirection * height;
int srcX= CurrentFrame * width;
//-- Définition du rectangle sprite sheet
Rect src = new Rect (srcX, srcY, srcX + width, srcY + height);
Rect dst = new Rect ( x, y, x+width, y+height);
tabReturn[0]=x;
tabReturn[1]=y;
tabReturn[2]=x+width;
tabReturn[3]=y+width;
canvas.drawBitmap(b, src, dst, null);
return tabReturn;
}
Le code est ici
Code avec animation de l’explosion ici
Votre commentaire