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