Page 2 sur 3
Re: 2D : Un mur, une raquette et une ball.
Publié : lun. 12/mai/2014 8:21
par Ar-S
Tout à fait d'accord.
C'est pour ça que je préfère la gestion des coo
Rds

balle/brique plus que des collisions pour les casses briques.
Re: 2D : Un mur, une raquette et une ball.
Publié : lun. 12/mai/2014 9:08
par falsam
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,
Est ce qu'une des solutions consiste à mettre un time out entres deux collisions ?
Ar-S a écrit :C'est pour ça que je préfère la gestion des coods balle/brique.
Coods ou Coord(
onnées) ?
Re: 2D : Un mur, une raquette et une ball.
Publié : lun. 12/mai/2014 9:23
par djes
falsam 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,
C'est pas de vénom, c'est de moi
falsam a écrit :Est ce qu'une des solutions consiste à mettre un time out entres deux collisions ?
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.
Mais il faut aussi tenir compte de la forme de la balle.
Re: 2D : Un mur, une raquette et une ball.
Publié : lun. 12/mai/2014 10:17
par falsam
djes a écrit :C'est pas de vénom, c'est de moi

Ooops pardon. j'ai corrigé le message.
Bien que pas facile à mettre en place, ta solution est intéressante. Merci pour cette explication.
Re: 2D : Un mur, une raquette et une ball.
Publié : mar. 13/mai/2014 20:37
par graph100
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.
Re: 2D : Un mur, une raquette et une ball.
Publié : mar. 13/mai/2014 22:15
par djes
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.
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.
Re: 2D : Un mur, une raquette et une ball.
Publié : sam. 02/août/2014 13:33
par Lemaquis
Bonjour à tous
j'essaye de crée un petit jeu à l'aide de l'excellent tuto de Falsam
juste une petite question : la variable VelocityY correspond t'elle à la vitesse de la balle?
merci encore pour ton tuto
Re: 2D : Un mur, une raquette et une ball.
Publié : sam. 02/août/2014 14:41
par falsam
Bonjour Lemaquis.
VelocityY combine la notion de
vitesse et celle de
direction du mouvement vertical
VelocityX combine la notion de
vitesse et celle de
direction du mouvement horizontal
■ Au début du jeu, la ball part du haut de l'écran avec une vélocité verticale (
VelocityY) positive égale à 1 et une vélocité horizontale (
VelocityX) égale à 0.
■ La balle touche la raquette, VelocityY devient négative égale à -1
■ La balle peut toucher la raquette moitié droite ou moitié gauche.
Cette moitié droite ou gauche est divisée en deux parties :
La moitié gauche engendre une vélocité horizontale égale à -1
L’extrême moitié gauche engendre une vélocité horizontale égale à -3
inversement
La moitié droite engendre une vélocité horizontale égale à 1
L’extrême moitié droite engendre une vélocité horizontale égale à 3
■ La position de la balle est mise à jour avec ces deux paramètres.
■ Reste à afficher le sprite correspondant à la balle
Re: 2D : Un mur, une raquette et une ball.
Publié : sam. 02/août/2014 15:38
par Lemaquis
Un grand Merci falsam pour ton explication
Re: 2D : Un mur, une raquette et une ball.
Publié : lun. 04/août/2014 9:32
par Lemaquis
Bonjour
je rencontre un probleme
Quand je mets cette Balle et la raquette ils sont tous les 2 de forme cubique :
La balle d'origine :
et la raquette d'origine :

Re: 2D : Un mur, une raquette et une ball.
Publié : lun. 04/août/2014 9:45
par falsam
Tu dois utiliser conjointement LoadSprite() avec un flag = #PB_Sprite_AlphaBlending et DisplayTransparentSprite()
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()
Re: 2D : Un mur, une raquette et une ball.
Publié : lun. 04/août/2014 10:51
par Lemaquis
merci de ta réponse
Re: 2D : Un mur, une raquette et une ball.
Publié : lun. 04/août/2014 18:58
par G-Rom
Juste une petite remarque lorsque l'on fait du jeu , les déplacements doivent être absolument basé sur le temps relatif au PC.
Sinon , d'un PC à l'autre , la vitesse de déplacement ne sera pas la même , si tu relances ton code dans 10 ans , ta balle va aller beaucoup plus vite à cause de la loi de moore

Pour cela , il faut calculer le temps que prends une boucle :
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
Viens ensuite les fonctions update() de tes objets, elles doivent prendre la forme suivante :
puis les mouvement eux même dans la fct° update()
de cette manière , tes déplacements iront toujours à la même vitesse avec n'importe quel PC.

Re: 2D : Un mur, une raquette et une ball.
Publié : lun. 04/août/2014 21:27
par venom
Merci pour tes explication G-Rom. Pouah c'est vraiment pas evident a faire un jeu
@++
Re: 2D : Un mur, une raquette et une ball.
Publié : mar. 05/août/2014 6:31
par Lemaquis
Merci mais j'ai rien compris du tout