Sprite collision
Publié : mar. 08/mars/2011 14:17
En ce moment, je regarde un peu les collisions avec les sprites, et je ne comprends pas comment fonctionne le spritePixelCollision().
Alors, déjà que ne soit pas pris en compte le canal alpha d'un png, bon, c'est dommage
.
Mais en plus, dans mon code ça ne marche pas comme ça devrait, on dirait.
Un code très simple :
http://blendman.free.fr/dev/pb/menu/collision.zip
Vous pourriez me dire où mon erreur et pourquoi on n'a pas de vrai détection au pixel (ou presque) ?
Merci beaucoup.
ps : le code uniquement (le zip contient le code et les 2 images)
Alors, déjà que ne soit pas pris en compte le canal alpha d'un png, bon, c'est dommage

Mais en plus, dans mon code ça ne marche pas comme ça devrait, on dirait.
Un code très simple :
http://blendman.free.fr/dev/pb/menu/collision.zip
Vous pourriez me dire où mon erreur et pourquoi on n'a pas de vrai détection au pixel (ou presque) ?
Merci beaucoup.
ps : le code uniquement (le zip contient le code et les 2 images)
Code : Tout sélectionner
;{ ************************enumeration ***********************
Enumeration
#window
#sprite
#sprite1
EndEnumeration
;}
;{ ************************ variables ************************
Global vitesse= 3
;}
;{ ************************ Structures ************************
Structure s_block
position.Point
previous.Point
vitesse.i
EndStructure
Global block.s_block
block\position\x = 15
block\position\y = 15
block\previous\x = block\position\x
block\previous\y = block\position\y
block\vitesse = 3
;}
;{ ************************ declare ***************************
Declare evenementClavier()
;}
;{ ************************ inititialisation *****************
InitKeyboard ()
InitSprite()
InitSprite3D()
UsePNGImageDecoder()
;}
;{ ************************ open window *********************
OpenWindow(#window, 0, 0,800, 600, "hello" , #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered )
OpenWindowedScreen( WindowID (#window),0,0, 800,600, 1, 0,0)
;}
;{ ************************ sprite et loading ***************
block_x = 350
block_y = 250
LoadSprite(#sprite,"col.png");
LoadSprite(#sprite1,"blockCollision.png");
TransparentSpriteColor(#sprite,RGB(255,0,0))
TransparentSpriteColor(#sprite1,RGB(255,0,0))
;}
;{ ************************ boucle principale ***************
Repeat
FlipBuffers ()
ClearScreen ( RGB (125,125,125))
Event= WindowEvent ()
ExamineKeyboard ()
evenementClavier()
If SpritePixelCollision(#sprite1,block\position\x, block\position\y,#sprite,block_x,block_y)
block\vitesse =0
block\position\x = block\previous\x
block\position\y = block\previous\y
Else
block\vitesse = 3
EndIf
DisplayTransparentSprite(#sprite1, block_x,block_y)
DisplayTransparentSprite(#sprite, block\position\x, block\position\y)
Until Event= #PB_Event_CloseWindow Or KeyboardPushed ( #PB_Key_Escape )
;}
Procedure evenementClavier()
If KeyboardPushed ( #PB_Key_Up )
block\previous\y = block\position\y
block\position\y - block\vitesse
EndIf
If KeyboardPushed ( #PB_Key_Down )
block\previous\y = block\position\y
block\position\y + block\vitesse
EndIf
If KeyboardPushed ( #PB_Key_Left )
block\previous\x = block\position\x
block\position\x - block\vitesse
EndIf
If KeyboardPushed ( #PB_Key_Right )
block\previous\x = block\position\x
block\position\x +block\vitesse
EndIf
EndProcedure