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

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Tonio
Messages : 95
Inscription : ven. 07/avr./2017 14:49
Localisation : Sud Est

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

Message 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é .
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

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

Message 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)
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Tonio
Messages : 95
Inscription : ven. 07/avr./2017 14:49
Localisation : Sud Est

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

Message 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 .
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

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

Message 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
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Tonio
Messages : 95
Inscription : ven. 07/avr./2017 14:49
Localisation : Sud Est

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

Message par Tonio »

Un grand merci Fig pour ton aide
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

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

Message 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...
Dernière modification par Fig le dim. 16/juil./2017 6:22, modifié 8 fois.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Tonio
Messages : 95
Inscription : ven. 07/avr./2017 14:49
Localisation : Sud Est

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

Message 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 ?
Avatar de l’utilisateur
case
Messages : 1545
Inscription : lun. 10/sept./2007 11:13

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

Message 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
ImageImage
Tonio
Messages : 95
Inscription : ven. 07/avr./2017 14:49
Localisation : Sud Est

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

Message 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?
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

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

Message par Fig »

Tu peux mettre des i à la place des f en fait...
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Tonio
Messages : 95
Inscription : ven. 07/avr./2017 14:49
Localisation : Sud Est

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

Message par Tonio »

Fig a écrit :Tu peux mettre des i à la place des f en fait...
merci pour tes conseils
Avatar de l’utilisateur
case
Messages : 1545
Inscription : lun. 10/sept./2007 11:13

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

Message par case »

je ferais comme dans l'exemple une structure pour la raquette, une pour la/les balle.
ImageImage
Tonio
Messages : 95
Inscription : ven. 07/avr./2017 14:49
Localisation : Sud Est

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

Message par Tonio »

case a écrit :je ferais comme dans l'exemple une structure pour la raquette, une pour la/les balle.
merci
Répondre