C'est pour ça que je préfère la gestion des cooRds

Est ce qu'une des solutions consiste à mettre un time out entres deux collisions ?djes a écrit :Oui et non, c'est surtout dû à la granularité du déplacement ......Il y a plusieurs façons de résoudre ce problème,
Coods ou Coord(onnées) ?Ar-S a écrit :C'est pour ça que je préfère la gestion des coods balle/brique.
C'est pas de vénom, c'est de moifalsam a écrit :venom a écrit :Oui et non, c'est surtout dû à la granularité du déplacement ......Il y a plusieurs façons de résoudre ce problème,
Oui, en partie. Une solution consiste à ce que, quand il y a collision, on revienne en arrière (en réduisant le pas ou par calcul) jusqu'au point de collision, et ce jusqu'à ce qu'il n'y ait plus de collision (on peut le faire de façon itérative). Là on peut calculer une nouvelle (et meilleure) trajectoire, par exemple par rapport à la pénétration précédente.falsam a écrit :Est ce qu'une des solutions consiste à mettre un time out entres deux collisions ?
Ooops pardon. j'ai corrigé le message.djes a écrit :C'est pas de vénom, c'est de moi
Sans aucun doute, d'ailleurs j'ai bien dit «ou», même si pour l'iteration je pensais aussi au fait de bien prendre en compte toutes les briques (et éventuellement toutes les balles) et toutes leurs collisions, ce qui doit se faire aussi après les changements de position suite à la collision initiale.graph100 a écrit :ou alors au lieu de faire ca de façon itérative, tu peux calculer le vecteur direction, partir du point précédent la collision, puis calculer le point de contact.
A mon avis c'est plus rapide.
Code : Tout sélectionner
BallX + VelocityX
BallY + VelocityY
Code : Tout sélectionner
DisplaySprite(Ball, BallX, BallY)
Code : Tout sélectionner
Enumeration
#MainForm
EndEnumeration
Global Ball, Racket
Procedure GamePreload()
UsePNGImageDecoder()
Ball = LoadSprite(#PB_Any, "228078Balle.png", #PB_Sprite_AlphaBlending)
Racket = LoadSprite(#PB_Any, "798087Raquette.png", #PB_Sprite_AlphaBlending)
EndProcedure
Procedure GameUpdate()
DisplayTransparentSprite(Ball, 200, 200)
DisplayTransparentSprite(Racket, 300, 550)
EndProcedure
Procedure GameStart()
Protected cr.b = #True
Protected Width = 800
Protected Height = 600
;Initialisation de l'environnement 2D
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 And InitSound() = 0
MessageRequester("Error", "Sprite system can't be initialized", 0)
End
EndIf
If OpenWindow(#mainform, 0, 0, Width, Height, "New Game", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
If OpenWindowedScreen(WindowID(#mainform), 0, 0, Width, Height)
GamePreload()
EndIf
EndIf
;-Boucle evenementielle
Repeat
Repeat
Event = WindowEvent()
Select event
Case #PB_Event_CloseWindow
End
EndSelect
Until event=0
FlipBuffers()
ClearScreen(RGB(135, 206, 250))
ExamineKeyboard()
ExamineMouse()
GameUpdate()
Until KeyboardPushed(#PB_Key_Escape)
EndProcedure
Procedure GameEnd()
EndProcedure
GameStart()
Code : Tout sélectionner
; Boucle principale
;
DeltaFrame.f = 0
While(1)
timer.l = ElapsedMilliseconds()
;Event de la fenetre mère
;Event du jeu
;Affichage
DeltaFrame = ( ElapsedMilliseconds() - timer ) / 1000
Wend
Code : Tout sélectionner
Update( dt.f )
Code : Tout sélectionner
objet_x + vitesse_x * dt
objet_y + vitesse_y * dt