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