2D : Un mur, une raquette et une ball.

Programmation avancée de jeux en PureBasic
Avatar de l’utilisateur
Ar-S
Messages : 9477
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: 2D : Un mur, une raquette et une ball.

Message par Ar-S »

Tout à fait d'accord.
C'est pour ça que je préfère la gestion des cooRds :twisted: 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
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: 2D : Un mur, une raquette et une ball.

Message 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) ?
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%
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: 2D : Un mur, une raquette et une ball.

Message 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.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: 2D : Un mur, une raquette et une ball.

Message 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.
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%
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: 2D : Un mur, une raquette et une ball.

Message 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.
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: 2D : Un mur, une raquette et une ball.

Message 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.
Lemaquis
Messages : 271
Inscription : mer. 25/déc./2013 7:34
Localisation : la corse

Re: 2D : Un mur, une raquette et une ball.

Message 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
LeMaquis
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: 2D : Un mur, une raquette et une ball.

Message 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.

Code : Tout sélectionner

  BallX + VelocityX
  BallY + VelocityY
■ Reste à afficher le sprite correspondant à la balle

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%
Lemaquis
Messages : 271
Inscription : mer. 25/déc./2013 7:34
Localisation : la corse

Re: 2D : Un mur, une raquette et une ball.

Message par Lemaquis »

Un grand Merci falsam pour ton explication
LeMaquis
Lemaquis
Messages : 271
Inscription : mer. 25/déc./2013 7:34
Localisation : la corse

Re: 2D : Un mur, une raquette et une ball.

Message 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 :
Image

et la raquette d'origine :

Image



Image
LeMaquis
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: 2D : Un mur, une raquette et une ball.

Message 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()
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%
Lemaquis
Messages : 271
Inscription : mer. 25/déc./2013 7:34
Localisation : la corse

Re: 2D : Un mur, une raquette et une ball.

Message par Lemaquis »

merci de ta réponse
LeMaquis
G-Rom
Messages : 3627
Inscription : dim. 10/janv./2010 5:29

Re: 2D : Un mur, une raquette et une ball.

Message 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 :

Code : Tout sélectionner

Update( dt.f )
puis les mouvement eux même dans la fct° update()

Code : Tout sélectionner

  objet_x + vitesse_x * dt
  objet_y + vitesse_y * dt
de cette manière , tes déplacements iront toujours à la même vitesse avec n'importe quel PC. ;)
Avatar de l’utilisateur
venom
Messages : 3072
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: 2D : Un mur, une raquette et une ball.

Message par venom »

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
Lemaquis
Messages : 271
Inscription : mer. 25/déc./2013 7:34
Localisation : la corse

Re: 2D : Un mur, une raquette et une ball.

Message par Lemaquis »

Merci mais j'ai rien compris du tout
LeMaquis
Répondre