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 cooRds :twisted: 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.

Code : Tout sélectionner

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

Code : Tout sélectionner

DisplaySprite(Ball, BallX, BallY)

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

et la raquette d'origine :

Image



Image

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 :

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. ;)

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