SpriteCollision()

Syntaxe

Resultat = SpriteCollision(#Sprite1, X1, Y1, #Sprite2, X2, Y2)
Description
Teste si deux Sprites se chevauchent.

Arguments

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

Valeur de retour

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

Remarques

Cette fonction teste une zone rectangulaire, ce qui la rend rapide mais peu précise, mais cependant très utile dans des jeux d'arcade. Fonctionne aussi avec les sprites zoomés.

Utiliser SpritePixelCollision() pour un test de collision précis.

Exemple

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

 ;Sprite Flèche
CreateSprite(0,20,20,#PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(0))
DrawText(0,0,"-->",RGB(255,255,0), RGB(0,0,0))
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=100

 ;Boucle 
While x < 800  ; Si la flèche manque la cible alors le programme se terminera quand x = 800
  
  ;La flèche avancera de 2 pixels vers la droite
  x=x+2
  
  ;Effacer complètement l'écran et afficher un fond noir
  ClearScreen(RGB(0,0,0))
  
  ;Affichage de la flèche
  DisplaySprite(0, x, 250)
  ;Affichage de la cible
  DisplaySprite(1, 500, 200)
  
  ;Détection de collision entre la flèche et la cible
  If SpriteCollision(0, x, 250, 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

SpritePixelCollision()

OS Supportés

Tous

<- SpriteBlendingMode() - Sprite Index - SpriteDepth() ->