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