- Ce sujet contient 2 réponses, 2 participants et a été mis à jour pour la dernière fois par
Mystr91, le il y a 1 année et 11 mois.
-
AuteurMessages
-
-
02/09/2020 à 7:34 #66327
Bonsoir à toutes/tous
Je suis entrain de faire les bases du casse Brique de le reproduire , j’ai donc voulu faire un petit jeux en reprenant les raquettes mais face a face , la balle et en définissant les limites . En haut la balle rebondit sans problème , a droite elle incrémenté bien le score du joueur 1 tout en se recollant sur la raquette du deuxième joueur . A gauche idem avec le score du deuxième joueur et elle se colle bien sur la raquette du premier joueur . Mais mon problème vient de la partie basse . J’ai la balle qui ne rebondit pas mais qui file droit sur l’axe X vers une des direction .
David precise que c’est un bug récurrent .Il donne la solution , que j’ai appliquer pour la partie haute de mon écran qui fonctionne . j’ai fait idem pour la partie basse , mais ça ne marche toujours pas ….Je vous met le code de mon fichier en espérant que vous pourrez m’aidez , en vous remerciant d’avance .
Code :
— variables —pad1 = {}
pad1.x = 0
pad1.y = 0
pad1.largeur = 15
pad1.hauteur = 75
pad1.vs = 400
pad1.score = 0pad2 = {}
pad2.x = 0
pad2.y = 0
pad2.largeur = 15
pad2.hauteur = 75
pad2.vs = 400
pad2.score = 0balle = {}
balle.x = 50
balle.y = 50
balle.rayon = 10
balle.colle = true
balle.colle2 = false
balle.vx = 0
balle.vy = 0ligne1_hauteur = 55
–font = love.graphics.newFont(« /Asset/Plastik.ttf »,22)
— Fonction 2D —
function love.load()
largeur = love.graphics.getWidth()
hauteur = love.graphics.getHeight()— Positions des raquettes —
pad1.x = 0 + (pad1.largeur/2)
pad1.y = 80
pad2.x = largeur – (pad2.largeur + 6)
pad2.y = 80demarre_jeu()
end
function love.update(dt)
if balle.colle == true then
balle.y = pad1.y + pad1.hauteur/2
balle.x = pad1.x + pad1.largeur + balle.rayon
else
balle.x = balle.x + balle.vx * dt
balle.y = balle.y + balle.vy * dt
endif balle.colle2 == true then
balle.y = pad2.y + pad2.hauteur/2
balle.x = pad2.x – balle.rayon
end— Instauration de l’aire de jeux
if balle.y < 0 then
balle.vy = 0 – balle.vy
balle.y = 0
endif balle.y > hauteur then
balle.vy = hauteur – balle.vy
balle.y = hauteur
end
if balle.x < 0 then
balle.colle = true
pad2.score = pad2.score + 1
elseif balle.x > largeur then
balle.colle2 = true
pad1.score = pad2.score + 1
endinput_utilisateur(dt)
end
function love.draw()
love.graphics.rectangle(« fill »,pad1.x,pad1.y,pad1.largeur,pad1.hauteur)
love.graphics.rectangle(« fill »,pad2.x,pad2.y,pad2.largeur,pad2.hauteur)love.graphics.circle(« line »,balle.x , balle.y ,balle.rayon)
–love.graphics.setFont(font)
love.graphics.print(« Joueur 1 »,10,25)
love.graphics.print(« Joueur 2 »,700,25)
love.graphics.print(pad1.score.. « – » .. pad2.score,385,25)for n=0,largeur do
love.graphics.print(« _ »,n , ligne1_hauteur)
endend
— Fonction perso —
function demarre_jeu()
— Restauration des parametres de la balle et sa mise en place —
balle.vx = 0
balle.vy = 0
balle.y = pad1.y + pad1.hauteur/2
balle.x = pad1.x + pad1.largeur + balle.rayonend
function input_utilisateur(dt)
if love.keyboard.isDown (« z ») and pad1.y > ligne1_hauteur + 25 then
pad1.y = pad1.y – pad1.vs * dt
endif love.keyboard.isDown(« s ») and pad1.y < hauteur – pad1.hauteur then
pad1.y = pad1.y + pad1.vs * dt
endif love.keyboard.isDown(« up ») and pad2.y > ligne1_hauteur + 25 then
pad2.y = pad2.y – pad2.vs * dt
endif love.keyboard.isDown(« down ») and pad2.y < (hauteur – pad2.hauteur) then
pad2.y = pad2.y + pad2.vs * dt
endif love.keyboard.isDown(« space ») then
if balle.colle == true then
balle.colle = false
balle.vx = 200
balle.vy = -200
elseif balle.colle2 == true then
balle.colle2 = false
balle.vx = -200
balle.vy = 200
end
end
end -
03/09/2020 à 1:44 #66328
Salut
Le problème viens d’ici :
if balle.y > hauteur then
balle.vy = hauteur – balle.vy
balle.y = hauteur
endQuand la balle dépasse la hauteur, tu fixe balle.vy à la hauteur – balle.vy, cette valeur ne changera donc plus car tu la fixe.
Au lieu de ca tu doit juste faire :
if balle.y > hauteur then
balle.vy = – balle.vy
balle.y = hauteur
endTu inverse seulement la vélocité de ta balle et ca devrait marcher.
Pareil pour le haut, inverse seulement la vélocité avec un balle.vy = -balle.vy
le « 0 » ne sert à rien et peut être source d’erreurA bientôt !
-
Cette réponse a été modifiée le il y a 1 année et 11 mois par
SENIO.
-
Cette réponse a été modifiée le il y a 1 année et 11 mois par
SENIO.
-
03/09/2020 à 3:56 #66333
SENIO Merci beaucoup c’était exactement ça qui merdait … Maintenant ça marche .
Maintenant faut que je me visionne exactement çe que fait ma ligne de code ça devrait m’aider pour plus tard .
Encore merci 🙂
-
Cette réponse a été modifiée le il y a 1 année et 11 mois par
-
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.