Vous lisez 1 fil de discussion
  • Auteur
    Messages
    • #66327
      Mystr91
      Participant

      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 = 0

      pad2 = {}
      pad2.x = 0
      pad2.y = 0
      pad2.largeur = 15
      pad2.hauteur = 75
      pad2.vs = 400
      pad2.score = 0

      balle = {}
      balle.x = 50
      balle.y = 50
      balle.rayon = 10
      balle.colle = true
      balle.colle2 = false
      balle.vx = 0
      balle.vy = 0

      ligne1_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 = 80

      demarre_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
      end

      if 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
      end

      if 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
      end

      input_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)
      end

      end

      — 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.rayon

      end

      function input_utilisateur(dt)

      if love.keyboard.isDown (« z ») and pad1.y > ligne1_hauteur + 25 then
      pad1.y = pad1.y – pad1.vs * dt
      end

      if love.keyboard.isDown(« s ») and pad1.y < hauteur – pad1.hauteur then
      pad1.y = pad1.y + pad1.vs * dt
      end

      if love.keyboard.isDown(« up ») and pad2.y > ligne1_hauteur + 25 then
      pad2.y = pad2.y – pad2.vs * dt
      end

      if love.keyboard.isDown(« down ») and pad2.y < (hauteur – pad2.hauteur) then
      pad2.y = pad2.y + pad2.vs * dt
      end

      if 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

    • #66328
      SENIO
      Participant

      Salut

      Le problème viens d’ici :
      if balle.y > hauteur then
      balle.vy = hauteur – balle.vy
      balle.y = hauteur
      end

      Quand 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
      end

      Tu 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’erreur

      A 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.
      • #66333
        Mystr91
        Participant

        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 🙂

Vous lisez 1 fil de discussion
  • Vous devez être connecté pour répondre à ce sujet.