[resolu]Soucis de SpriteCollision..
Publié : dim. 24/janv./2010 14:53
Yo,
Toujours dans ma découverte de la 2D, je teste la collision. Rien de tels qu'une palette, une balle est un plafond pour ça...
Et ba c'est pas si simple...
Mon soucis pour le moment est que je ne ne pige pas pourquoi mon spritecollision ne détecte pas la collision de la balle (sprite 1) sur le plafond (sprite 2)
Y'a d'autres soucis mais pour le moment j'aimerai comprendre cette histoire de collision ô combien importante.
// Trucs réglés
- Stop la palette à gauche et à droite de l'écran
- La balle est centrée sur la palette
- La balle monte lorsque l'on appuie sur "Espace"
// Trucs à faire
- Comprendre pourquoi la collision chie
- Lorsque la balle est sur la palette, qu'elle reste centrée sur celle-ci quand la palette atteint un bord de l'écran (droite gauche)
Voilà le code.
Il peut surement être optimisé, que pourriez vous me conseiller comme approche pour simplifier tout ça ?
D'avance merci
Toujours dans ma découverte de la 2D, je teste la collision. Rien de tels qu'une palette, une balle est un plafond pour ça...
Et ba c'est pas si simple...
Mon soucis pour le moment est que je ne ne pige pas pourquoi mon spritecollision ne détecte pas la collision de la balle (sprite 1) sur le plafond (sprite 2)
Y'a d'autres soucis mais pour le moment j'aimerai comprendre cette histoire de collision ô combien importante.
// Trucs réglés
- Stop la palette à gauche et à droite de l'écran
- La balle est centrée sur la palette
- La balle monte lorsque l'on appuie sur "Espace"
// Trucs à faire
- Comprendre pourquoi la collision chie
- Lorsque la balle est sur la palette, qu'elle reste centrée sur celle-ci quand la palette atteint un bord de l'écran (droite gauche)
Voilà le code.
Il peut surement être optimisé, que pourriez vous me conseiller comme approche pour simplifier tout ça ?
D'avance merci

Code : Tout sélectionner
; PB 4.40
;Mon 1er test 2D - palette + balle + plafond
InitSprite() : InitKeyboard()
Global gauche,droite,vitesse,Hfenetre,Lfenetre,Hscreen,Lscreen,haut,bas,Vitesse_Verticale,gauche,droite
; Dimensions de la palette
LPalette=100 : HPalette=10 ; Dimension de la palette
;fenêtre
Lfenetre=GetSystemMetrics_(#SM_CXSCREEN) ; recup la resolution de l'ecran en cours
Hfenetre=GetSystemMetrics_(#SM_CYSCREEN)
If Lfenetre>400 And Hfenetre>400
Lfenetre=400 : Hfenetre=400
EndIf
Lscreen=Lfenetre : Hscreen=Hfenetre-20
; Positions de la palette
centre=Lscreen/2-LPalette/2 ; on trouve le centre de la fdenetre
PosXpalette=centre ; on centre la palette par defaut dans l'ecran
PosYpalette=Hscreen-HPalette*2 ; on positionne la palette verticalement
;position balle
PosXball=PosXpalette+LPalette/2-8 ; Centre la balle sur la palette
PosXballMin=PosXpalette+LPalette/2-8 ; Centre la balle sur la palette
PosYball=PosYpalette-16 ; position de la balle sur la palette
PosYballMin=PosYpalette-16 ; position verticale minimum avant perdue
PosYballMax=0 ; position verticale maximum avant plafond
; Position et taille du Plafond
Lplafond=Lscreen ; plafond aussi large que l'ecran de jeu
Hplafond=15 ; epaisseur
Xplafond=0 : Yplafond=0
; Autre paramettres
vitesse = 20 ; vitesse de deplacement de la palette
Vitesse_Verticale = 10 ; Vitesse de deplacement de la balle
gauche=-vitesse
droite=vitesse
haut=-Vitesse_Verticale
bas=Vitesse_Verticale
cogne=0
OpenWindow(0, #PB_Ignore, #PB_Ignore, Lfenetre, Hfenetre, "Window", #PB_Window_ScreenCentered)
ButtonGadget(0, 0, Hfenetre-20, 100, 20, "Quitter")
If OpenWindowedScreen(WindowID(0), 0, 0, Lscreen, Hscreen, 0, 0, 0)
; CREATION DES SPRITES--------------------
CreateSprite(0, LPalette, HPalette)
If StartDrawing(SpriteOutput(0))
Box(0, 0, LPalette, HPalette, RGB(55, 100, 255)) ; palette
StopDrawing()
EndIf
CreateSprite(1,16,16)
If StartDrawing(SpriteOutput(1))
Circle(8,8,8,#yellow) ; la balle
StopDrawing()
EndIf
CreateSprite(2,Lplafond,Hplafond)
If StartDrawing(SpriteOutput(2))
Box(Xplafond,Yplafond,Lplafond,Hplafond,#red) ; Le plafond
StopDrawing()
EndIf
; ---------------------------------------
EndIf
;{- Event loop
Repeat
; Il est très important de traiter tous les événements restants dans la file d'attente à chaque tour
Repeat
Event = WindowEvent()
Select Event
Case #PB_Event_Gadget
If EventGadget() = 0
End
EndIf
EndSelect
Until Event = 0
FlipBuffers()
ClearScreen(RGB(0, 0,0))
ExamineKeyboard()
DisplaySprite(0, PosXpalette, PosYpalette)
DisplaySprite(1,PosXball,PosYball)
DisplaySprite(2, 0, 0)
If KeyboardPushed(#PB_Key_Left)
PosXpalette+gauche
If PosYball=PosYballMin
PosXball+gauche
EndIf
If PosXpalette <= 0 ; Si la palette arrive a gauche
PosXpalette=0 ; alors elle s'arrette
EndIf
EndIf
If KeyboardPushed(#PB_Key_Right)
PosXpalette+droite
If PosYball=PosYballMin
PosXball+droite
EndIf
If PosXpalette >= Lscreen-LPalette
PosXpalette=Lscreen-LPalette
EndIf
Debug PosXpalette
EndIf
If KeyboardPushed(#PB_Key_Space)
;PosYball-10
CollisionMur = SpriteCollision(1, PosXball, PosYball, 2, Lplafond, Hplafond)
Debug CollisionMur
If CollisionMur=0
PosYball+haut ; la balle monte de 20px
Debug CollisionMur
Else
;PosYball<= Hplafond
PosYball+bas
EndIf
Debug PosYball
Debug Yplafond
EndIf
If KeyboardPushed(#PB_Key_Escape)
PosXpalette=centre
PosYpalette=Hscreen-HPalette*2
;position balle
PosXball=PosXpalette+LPalette/2-8
PosYball=PosYpalette-16
EndIf
Delay(2)
ForEver