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