2D : Un mur, une raquette et une ball.
Re: 2D : Un mur, une raquette et une ball.
Tout à fait d'accord.
C'est pour ça que je préfère la gestion des cooRds balle/brique plus que des collisions pour les casses briques.
C'est pour ça que je préfère la gestion des cooRds balle/brique plus que des collisions pour les casses briques.
Dernière modification par Ar-S le lun. 12/mai/2014 22:22, modifié 1 fois.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: 2D : Un mur, une raquette et une ball.
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.
Dernière modification par falsam le lun. 12/mai/2014 10:13, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: 2D : Un mur, une raquette et une ball.
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 ?
Mais il faut aussi tenir compte de la forme de la balle.
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: 2D : Un mur, une raquette et une ball.
Ooops pardon. j'ai corrigé le message.djes a écrit :C'est pas de vénom, c'est de moi
Bien que pas facile à mettre en place, ta solution est intéressante. Merci pour cette explication.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: 2D : Un mur, une raquette et une ball.
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.
A mon avis c'est plus rapide.
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel )
Mon site : CeriseCode (Attention Chantier perpétuel )
Re: 2D : Un mur, une raquette et une ball.
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.
Re: 2D : Un mur, une raquette et une ball.
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
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
LeMaquis
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: 2D : Un mur, une raquette et une ball.
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
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.
Code : Tout sélectionner
BallX + VelocityX
BallY + VelocityY
Code : Tout sélectionner
DisplaySprite(Ball, BallX, BallY)
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: 2D : Un mur, une raquette et une ball.
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 :
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 :
LeMaquis
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: 2D : Un mur, une raquette et une ball.
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()
Dernière modification par falsam le lun. 04/août/2014 10:53, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: 2D : Un mur, une raquette et une ball.
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 :
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.
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
Code : Tout sélectionner
Update( dt.f )
Code : Tout sélectionner
objet_x + vitesse_x * dt
objet_y + vitesse_y * dt
Re: 2D : Un mur, une raquette et une ball.
Merci pour tes explication G-Rom. Pouah c'est vraiment pas evident a faire un jeu
@++
@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
GPU : radeon HD6370M, CPU : p6200 2.13Ghz