SpritePixelCollision()

Syntaxe

Resultat = SpritePixelCollision(#Sprite1, X1, Y1, #Sprite2, X2, Y2)
Description
Vérifie si deux Sprites se chevauchent.

#PB_Sprite_PixelCollision doit être spécifié lors de la création sprite.

Arguments

#Sprite1 Le premier sprite à tester.
X1, Y1 Les coordonnées du premier sprite, en pixels.
#Sprite2 Le second sprite à tester.
X2, Y2 Les coordonnées du second sprite, en pixels.

Valeur de retour

Renvoie une valeur non nulle si les deux sprites entrent en collision, zéro sinon.

Remarques

Cette fonction effectue une comparaison pixel par pixel sur les pixels transparents des deux sprites ce qui rend la routine très précise mais également relativement lente. Pour optimiser au maximum la comparaison, il convient d'enlever le plus possible la zone transparente autour du sprite, pour ne garder que sa dimension réelle. Fonctionne avec les sprites zoomés.

Pour plus de rapidité, utiliser SpriteCollision() qui ne teste ques les bordures rectangulaires.

Attention, ne fonctionne pas avec les sprites ayant subi une rotation ou une transformation.

Exemple

InitSprite()
OpenScreen(800,600,32,"Exemple OpenScreen")

 ;Sprite Balle
CreateSprite(0,30,30,#PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(0))
Circle(15,15,13,RGB(255,255,255))
Circle(15,15,10,RGB(128,128,128))
StopDrawing()

 ;Sprite Cible
CreateSprite(1,100,100,#PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(1))
Circle(50,50,49,RGB(255,255,0))
Circle(50,50,40,RGB(0,255,0))
Circle(50,50,30,RGB(0,255,255))
Circle(50,50,20,RGB(0,0,255))
Circle(50,50,10,RGB(255,0,0))
StopDrawing()

 ;Sprite Boom
CreateSprite(2,100,100,#PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(2))
Circle(50,50,50,RGB(255,0,0))
DrawText(50-TextWidth("BOOM")/2,50-TextHeight("BOOM")/2,"BOOM",RGB(255,255,0),RGB(255,0,0))
StopDrawing()

 ;Coordonnée de départ en x de la flèche
x=0

 ;Boucle 
While x < 800  ; Si la balle manque la cible alors le programme se terminera quand x = 800
  
  ;La balle avancera de 4 pixels vers la droite
  x=x+4
  
  ;Effacer complètement l'écran et afficher un fond noir
  ClearScreen(RGB(0,0,0))
  
  ;Affichage de la flèche
  DisplaySprite(0, x, 240)
  ;Affichage de la cible
  DisplaySprite(1, 500, 200)
  
  ;Détection de collision entre la balle et la cible
  If SpritePixelCollision(0, x, 240, 1, 500, 200) <> 0
    ;S'il y a collision alors on efface l'écran et on affiche BOOM
    ClearScreen(RGB(0,0,0))
    DisplaySprite(2, 500, 200)
    ;On inverse les buffers pour rendre la scène visible à l'écran.
    FlipBuffers()
    Delay(2000)
    ClearScreen(RGB(0,0,0))
    End ; et puis on ferme le programme
  EndIf 
  
  ;Maintenant que tout est calculé et affiché dans le buffer invisible,
  ;On inverse les buffers pour rendre la scène visible à l'écran.
  FlipBuffers()
  
  Delay(10)
  
Wend

Voir aussi

SpriteCollision()

OS Supportés

Tous

<- SpriteOutput() - Sprite Index - SpriteQuality() ->