Page 1 sur 1

Probléme pour centrée une balle sur la raquette ....

Publié : sam. 15/juil./2017 13:58
par Tonio
Bonjour

j'ai un petit probleme avec mon code j'arrive pas à placer la balle pour qu'elle soit centrée sur la raquette au lancement d'une partie là si on lance le code la balle est bien centrer mais elle bouge pas avec la raquette elle est pas collée avec la raquette

Si je modifie la ligne :

Code : Tout sélectionner

DisplayTransparentSprite(#spr_Balle, gWidth/2,gHeight - 55)
et que la remplace par :

Code : Tout sélectionner

DisplayTransparentSprite(#spr_Balle,  balle\posX,gHeight - 55)

la balle est bien collée avec la raquette mais elle est pas centrée .

Merci d'avance

Code : Tout sélectionner

;-- Initialisation 
EnableExplicit
If InitSprite()=0 Or InitKeyboard()=0 Or InitSound()=0 Or InitMouse()=0
  MessageRequester("Erreur", "Impossible d'initialiser le jeux ")
  End
EndIf

;-- Constantes 
Enumeration MainForm
  #Main_Window
EndEnumeration

Enumeration Game
  #spr_Raquette
  #spr_Balle
EndEnumeration

;-- Structure pour les élements du jeu 
Structure Sprites
  posX.i
  posY.i
EndStructure  

;-- Gestion de la raquette 
Global raquette.Sprites
;-- Gestion de la balle 
Global balle.Sprites,gBalleColle = #False


;-- variables globales
Global gWidth = 800,gHeight = 600,gEvent,gMouseX

;-- Création de la fenetre
OpenWindow(#Main_Window,0,0,gWidth,gHeight,"",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Main_Window),0,0,gWidth,gHeight)
SetWindowTitle(#Main_Window,"Casse Briques 2017 ")

;-- Création de la raquette
CreateSprite(#spr_Raquette,150,16)
StartDrawing(SpriteOutput(#spr_Raquette))
Box(0, 0, 150,16, RGB(0, 128, 192))
StopDrawing()

;-- Création de la balle 
CreateSprite(#spr_Balle,32,32)
StartDrawing(SpriteOutput(#spr_Balle))
Circle(10,10,10,RGB(255, 255, 0))
StopDrawing()









;-- Boucle principale du jeu 
Repeat
    Repeat
  gEvent = WindowEvent()
  Select gEvent
      Case #PB_Event_CloseWindow
      End
  EndSelect
   Until gEvent = 0
     ;-- Partie 2D
     ClearScreen(RGB(0, 0, 0))
     ;-- Affichage de la raquette 
     DisplayTransparentSprite(#spr_Raquette,raquette\posX, gHeight-30)
     ;-- Affichage de la balle 
     DisplayTransparentSprite(#spr_Balle, gWidth/2,gHeight - 55)
        ;-- Deplacement de la raquette avec la souris
    ExamineMouse()
    gMouseX = MouseX()
    If gMouseX <= gWidth - 150
      raquette\posX = gMouseX
    EndIf  
    ;-- Test Si la balle est collée à la raquette 
    If gBalleColle = #True
      balle\posX = raquette\posX
   
    EndIf  
     
 
    
 
     ExamineKeyboard()
      FlipBuffers()
Until KeyboardReleased(#PB_Key_Escape)
End


ps:
j'ai essayé pas de solutions avant de posté .

Re: Probléme pour centrée une balle sur la raquette ....

Publié : sam. 15/juil./2017 14:10
par microdevweb
Dans ton code tu place la balle au centre de l'écran mais ne décale pas à gauche de la moitié de la largeur de balle.

Voici ce qu'il faut faire

Code : Tout sélectionner

  ;-- Affichage de la balle 
     DisplayTransparentSprite(#spr_Balle, (gWidth/2)-(SpriteWidth(#spr_Balle)/2),gHeight - 55)

Re: Probléme pour centrée une balle sur la raquette ....

Publié : sam. 15/juil./2017 14:13
par Tonio
microdevweb a écrit :Dans ton code tu place la balle au centre de l'écran mais ne décale pas à gauche de la moitié de la largeur de balle.

Voici ce qu'il faut faire

Code : Tout sélectionner

  ;-- Affichage de la balle 
     DisplayTransparentSprite(#spr_Balle, (gWidth/2)-(SpriteWidth(#spr_Balle)/2),gHeight - 55)

merci microdevweb pour ton aide mais ça marche pas car la balle doit etre collée à la raquette .

Re: Probléme pour centrée une balle sur la raquette ....

Publié : sam. 15/juil./2017 14:21
par Fig
Comme ça, mais vu le code je prévois des questions supplémentaires sous peu... :wink:

Code : Tout sélectionner

;-- Initialisation 
EnableExplicit
If InitSprite()=0 Or InitKeyboard()=0 Or InitSound()=0 Or InitMouse()=0
  MessageRequester("Erreur", "Impossible d'initialiser le jeux ")
  End
EndIf

;-- Constantes 
Enumeration MainForm
  #Main_Window
EndEnumeration

Enumeration Game
  #spr_Raquette
  #spr_Balle
EndEnumeration

;-- Structure pour les élements du jeu 
Structure Sprites
  posX.i
  posY.i
EndStructure  

;-- Gestion de la raquette 
Global raquette.Sprites
;-- Gestion de la balle 
Global balle.Sprites,gBalleColle


;-- variables globales
Global gWidth = 800,gHeight = 600,gEvent,gMouseX

;-- Création de la fenetre
OpenWindow(#Main_Window,0,0,gWidth,gHeight,"",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Main_Window),0,0,gWidth,gHeight)
SetWindowTitle(#Main_Window,"Casse Briques 2017 ")

;-- Création de la raquette
CreateSprite(#spr_Raquette,150,16)
StartDrawing(SpriteOutput(#spr_Raquette))
Box(0, 0, 150,16, RGB(0, 128, 192))
StopDrawing()

;-- Création de la balle 
CreateSprite(#spr_Balle,21,21)
StartDrawing(SpriteOutput(#spr_Balle))
Circle(10,10,10,RGB(255, 255, 0))
StopDrawing()

;initialise la balle
gBalleColle = #True
balle\posY=gHeight-30-SpriteHeight(#spr_balle)
;-- Boucle principale du jeu 
Repeat
    Repeat
  gEvent = WindowEvent()
  Select gEvent
      Case #PB_Event_CloseWindow
      End
  EndSelect
   Until gEvent = 0
     ;-- Partie 2D
     ClearScreen(RGB(0, 0, 0))
     ;-- Affichage de la raquette 
     DisplayTransparentSprite(#spr_Raquette,raquette\posX, gHeight-30)
     ;-- Affichage de la balle 
     DisplayTransparentSprite(#spr_Balle, balle\posX,balle\posY)
        ;-- Deplacement de la raquette avec la souris
    ExamineMouse()
    gMouseX = MouseX()
    raquette\posX = gMouseX
    If gMouseX > gWidth - SpriteWidth(#spr_Raquette)
      raquette\posX = gWidth - SpriteWidth(#spr_Raquette)
    EndIf  
    ;-- Test Si la balle est collée à la raquette 
    If gBalleColle = #True
      balle\posX = raquette\posX+SpriteWidth(#spr_Raquette)/2-SpriteWidth(#spr_Balle)/2
    EndIf  
     

    

     ExamineKeyboard()
      FlipBuffers()
Until KeyboardReleased(#PB_Key_Escape)
End

Re: Probléme pour centrée une balle sur la raquette ....

Publié : sam. 15/juil./2017 14:26
par Tonio
Un grand merci Fig pour ton aide

Re: Probléme pour centrée une balle sur la raquette ....

Publié : sam. 15/juil./2017 14:44
par Fig
Il n'y a pas un tuto là dessus ? :?

Si tu sèche, voici l'étape suivante:

Code : Tout sélectionner

;-- Initialisation 
EnableExplicit
If InitSprite()=0 Or InitKeyboard()=0 Or InitSound()=0 Or InitMouse()=0
  MessageRequester("Erreur", "Impossible d'initialiser le jeux ")
  End
EndIf

;-- Constantes 
Enumeration MainForm
  #Main_Window
EndEnumeration

Enumeration Game
  #spr_Raquette
  #spr_Balle
EndEnumeration

;-- Structures pour les élements du jeu 
Structure raquette
  posX.i
  posY.i
EndStructure

Structure balle
   PosX.i
   PosY.i
   vitesseX.i
   vitesseY.i
   colle.c
EndStructure

;-- Gestion de la raquette 
Global raquette.raquette
;-- Gestion de la balle 
Global balle.balle


;-- variables globales
Global gWidth = 800,gHeight = 600,gEvent,gMouseX

;-- Création de la fenetre
OpenWindow(#Main_Window,0,0,gWidth,gHeight,"",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Main_Window),0,0,gWidth,gHeight)
SetWindowTitle(#Main_Window,"Casse Briques 2017 ")

;-- Création de la raquette
CreateSprite(#spr_Raquette,150,16)
StartDrawing(SpriteOutput(#spr_Raquette))
Box(0, 0, 150,16, RGB(0, 128, 192))
StopDrawing()

;-- Création de la balle 
CreateSprite(#spr_Balle,21,21)
StartDrawing(SpriteOutput(#spr_Balle))
Circle(10,10,10,RGB(255, 255, 0))
StopDrawing()

;initialise la balle
balle\Colle = #True
balle\posY=gHeight-30-SpriteHeight(#spr_balle)
;-- Boucle principale du jeu 
Repeat
    Repeat
  gEvent = WindowEvent()
  Select gEvent
      Case #PB_Event_CloseWindow
      End
  EndSelect
   Until gEvent = 0
     ;-- Partie 2D
     ClearScreen(RGB(0, 0, 0))
     ;-- Affichage de la raquette 
     DisplayTransparentSprite(#spr_Raquette,raquette\posX, gHeight-30)
     ;-- Affichage de la balle 
     DisplayTransparentSprite(#spr_Balle, balle\posX,balle\posY)
        ;-- Deplacement de la raquette avec la souris
    ExamineMouse()
    gMouseX = MouseX()
    raquette\posX = gMouseX
    If gMouseX > gWidth - SpriteWidth(#spr_Raquette)
      raquette\posX = gWidth - SpriteWidth(#spr_Raquette)
    EndIf 
    If balle\colle=#True And MouseButton(#PB_MouseButton_Left)<>0
       balle\colle=#False
       balle\vitesseX=Random(10)
       balle\vitesseY=-Random(6)-4
    EndIf
    ;rebond mur latéraux
    If balle\PosX>Gwidth-SpriteWidth(#spr_Balle) Or balle\PosX<0
         balle\vitesseX=-balle\vitesseX
      EndIf
    ;rebond mur du haut
    If balle\PosY<0
       balle\vitesseY=-balle\vitesseY
    EndIf
    ;rebond sur la raquette
    If (balle\PosY>gHeight-30-SpriteHeight(#spr_balle) And balle\PosX>raquette\posX-SpriteWidth(#spr_balle) And balle\PosX<raquette\posX+SpriteWidth(#spr_Raquette))
       balle\vitesseX=Random(10)
       balle\vitesseY=-Random(6)-4
    EndIf
    ;balle perdue
    If balle\PosY>gHeight-30
       ;fin de partie
       End
    EndIf    
    ;-- Test Si la balle est collée à la raquette 
    If balle\colle = #True
       balle\posX = raquette\posX+SpriteWidth(#spr_Raquette)/2-SpriteWidth(#spr_Balle)/2
    Else ;déplace la balle si elle n'est pas collée
       balle\posX + balle\vitesseX
       balle\posy + balle\vitessey
    EndIf  
     ExamineKeyboard()
      FlipBuffers()
Until KeyboardReleased(#PB_Key_Escape)
End
edit: correction sur la vitesse de la balle, la précision de la collision avec la raquette, le mur droit...

Re: Probléme pour centrée une balle sur la raquette ....

Publié : sam. 15/juil./2017 14:54
par Tonio
merci Fig

Pourquoi mettre un .f plutôt qu'un .i ?
et je vois que crée une struture pour la raquette et une autre pour la balle pourquoi pas crée une seule structure pour les 2 objets ?

Re: Probléme pour centrée une balle sur la raquette ....

Publié : sam. 15/juil./2017 17:28
par case
parce-que la balle a plus de champs que la raquette ou pas les mêmes mais tu peux effectivement créer une seul structure pour les deux
et avois une structurte raquette et une balle te permet d'ajouter des champs de manière précise a chaque objets

Re: Probléme pour centrée une balle sur la raquette ....

Publié : sam. 15/juil./2017 17:48
par Tonio
case a écrit :parce-que la balle a plus de champs que la raquette ou pas les mêmes mais tu peux effectivement créer une seul structure pour les deux
et avois une structurte raquette et une balle te permet d'ajouter des champs de manière précise a chaque objets

Merci case pour les explications et toi tu ferais comment?

Re: Probléme pour centrée une balle sur la raquette ....

Publié : sam. 15/juil./2017 18:19
par Fig
Tu peux mettre des i à la place des f en fait...

Re: Probléme pour centrée une balle sur la raquette ....

Publié : sam. 15/juil./2017 18:50
par Tonio
Fig a écrit :Tu peux mettre des i à la place des f en fait...
merci pour tes conseils

Re: Probléme pour centrée une balle sur la raquette ....

Publié : dim. 16/juil./2017 0:48
par case
je ferais comme dans l'exemple une structure pour la raquette, une pour la/les balle.

Re: Probléme pour centrée une balle sur la raquette ....

Publié : dim. 16/juil./2017 6:19
par Tonio
case a écrit :je ferais comme dans l'exemple une structure pour la raquette, une pour la/les balle.
merci