Sprite, gestion des collisions

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 :

Collision

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

Screenshot_2013-08-28-12-19-16

 

Code avec animation de l’explosion ici

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

Articles récents
Commentaires récents
fatima dans Bienvenue !
AdminDroid dans Bienvenue !
fatima dans Bienvenue !
Archives
Catégories
%d blogueurs aiment cette page :