Communauté

Pourquoi la balle r...
 
Notifications
Retirer tout

[Résolu] Pourquoi la balle revient-elle tout seule ?

9 Posts
2 Utilisateurs
0 Likes
451 Vu
0
Début du sujet

J'y perd mon latin, et en plus je ne parle pas latin...😁 (Et j'ai passé du temps, je vous promets... donc c''est l'heure d'appeler à l'aide 🤣)

Screen = { } -- dimensions fenêtre Love
Screen.largeur = love.graphics.getWidth()
Screen.hauteur = love.graphics.getHeight()

Balle1 = { }
Balle1.largeur = 15
Balle1.hauteur = 15
Balle1.vx = 3
Balle1.vy = 2
Balle1.isOn = true
Balle1.HitCompteur = 0

Pad = { }
Pad.hauteur = 150
Pad.largeur = 17
Pad.x = 0
Pad.y = Screen.hauteur / 2 - Pad.hauteur / 2
Pad.decalageBordGauche = 3
Pad.decalageHautBas = 1
Pad.vy = 8

Font = love.graphics.newFont("PixelMaster.ttf", 30)
love.graphics.setFont(Font)

function Scores()
  score = ("Balle 1 : " ..Balle1.HitCompteur)
end
function Controles()
  -- Contrôler Pad avec touches
  if love.keyboard.isDown("a") then
    if Pad.y > 0 + Pad.decalageHautBas then
      Pad.y = Pad.y - Pad.vy
    end
  end
  if love.keyboard.isDown("q") then
    if Pad.y + Pad.hauteur < Screen.hauteur - Pad.decalageHautBas then
      Pad.y = Pad.y + Pad.vy
    end
  end
end

-- 
-- ====== FONCTIONS LOVE ==================
--
function love.load()
-- Centrer Balle1
  Balle1.x = Screen.largeur / 2 - Balle1.largeur / 2
  Balle1.y = Screen.hauteur / 2 - Balle1.hauteur / 2
end

function love.update()

  Controles()
  Scores()

-- ====== BALLE 1 ====================  
-- mise en mouvement
  Balle1.x = Balle1.x + Balle1.vx
  Balle1.y = Balle1.y + Balle1.vy

-- Collisions :
-- sur bord Bas
  if Balle1.y + Balle1.hauteur > Screen.hauteur then
    Balle1.vy = Balle1.vy * -1
  end

-- sur bord Haut 
  if Balle1.y < 0 then
    Balle1.vy = Balle1.vy * -1
  end

-- sur bord Droit
  if Balle1.x + Balle1.largeur > Screen.largeur then
    Balle1.vx = Balle1.vx * -1
  end

-- sur Pad : la Balle1 entre-t-elle "quelque part" sur le terrain où circule le Pad ?
  if Balle1.x < Pad.x + Pad.largeur then
    -- Si oui, ensuite : la Balle1 rencontre-t-elle la surface du Pad ?
    if Balle1.y + Balle1.hauteur > Pad.y and Balle1.y < Pad.y + Pad.hauteur then
      -- dans ce cas la Balle1 a tapé la surface du Pad, et repart en sens inverse :
      Balle1.vx = Balle1.vx * -1
      -- Incrémentation du compteur 1
      Balle1.HitCompteur = Balle1.HitCompteur + 1
      -- et re-positionnement de la Balle 'pile poil' sur le Pad -> 
      Balle1.x = Pad.x + Pad.largeur
    end
  end
end

function love.draw()
  love.graphics.setBackgroundColor(0,0.2,0.3,1)

-- Compteurs
  love.graphics.print(score, 500, 10)

-- Pad  
  love.graphics.rectangle("fill", Pad.x + Pad.decalageBordGauche, Pad.y, Pad.largeur, Pad.hauteur, 5, 5, 2 )

-- Balle1
  if Balle1.isOn == true then
    love.graphics.rectangle("fill", Balle1.x, Balle1.y, Balle1.largeur, Balle1.hauteur)
  end
end

 

9 Réponses
0

Voilà ma réponse en vidéo :

https://vimeo.com/769796847

0

@iguanodon Déjà à vue de nez tu ne contrôles pas correctement la collision horizontale avec la raquette, tu ne regardes que si la balle est :

Balle1.x < Pad.x + Pad.largeur

Ce qui équivaut à ne regarder que si la balle est à gauche du bord droit du pad, mais tu ne contrôles pas si elle est également à droite du bord gauche (en gros tu dois regarder 2 choses : la balle est elle entre le bord gauche et le bord droit du pad).

 

0
Début du sujet

Merci, mais pourtant p22 du support de cours, "Faire rebondir la balle sur la raquette"il n'est question que de balle X, au contact de Pad x + largeur du Pad pour que ça fonctionne, ce que je conçois bien. 

Pourquoi maintenant contrôler si la balle est entre le bord gauche le le droit du pad ? Pourquoi devrait-elle "entrer" dans le pad ? 

Je me fourvoie sans doute dans un raisonnement qui n'est pas le bon. Apprentissage < comprentissage... 😁 certes, mais je n'avance plus.. 

0

Peux tu me dire de quel support de cours il s'agit (et de quel atelier du coup car tu ne l'as pas précisé).

Car il n'y a pas de support de cours sur mon atelier Casse brique en Lua :).

0
Posté par: @iguanodon

if Balle1.x < Pad.x + Pad.largeur then

Dans tous les cas il suffit d'ajouter 

and Balle1.x > Pad.x

à ta condition.

Dans l'atelier j'utilise une autre méthode qui consiste à regarder la distance entre le centre de la balle et le centre du pad.

0
Début du sujet

Ah ! , c'est le "Atelier 1er jeu vidéo : Jeu de Pong : Apprenez à coder votre premier jeu vidéo rapidement et facilement", p22 donc. Car c'est le "pong", que je bidouille pour m'entraîner, transformer. Merci 😁 (Objectif 2ème balle sous certaines conditions, complications etc...) 

0

Ok donc maintenant j'ai compris et j'ai trouvé le bug. Je t'expliquerai ça avec une vidéo laisse moi 1/2 journée. 

0
Début du sujet

Tout ton temps, merci pour ton suivi. 👍

Ma façon de faire est souvent d'improviser sur les leçons après coup, au risque (bénéfice) de rencontrer des inconnues... 😁

0
Début du sujet

Compris ! 😁 Merci pour ta vidéo et le temps passé. 👍

Répondre
Share:

Dialoguez avec les autres membres de la gamecodeur school.

Accédez maintenant à notre serveur Discord privé : Entraide, Game Jams, Partage de projets, etc.

Vous devez être membre de la Gamecodeur School Premium pour être autorisé à accéder au serveur.