Étiqueté : collisions, lua
- Ce sujet contient 1 réponse, 1 participant et a été mis à jour pour la dernière fois par
Yuneraa, le il y a 1 année et 11 mois.
Vous lisez 1 fil de discussion
-
AuteurMessages
-
-
08/09/2020 à 5:04 #66412
Bonjour,
Dans le but de m’entraîner après l’atelier Casse-briques, je me suis lancée le défi de faire un Pong. Seulement, après de nombreux essais (cela fait 2h30 que j’y suis, sans compter hier !) je n’arrive pas à programmer les collisions de la balle sur la raquette. J’ai tenté de faire des schémas pour bien me représenter ce que j’essayais de faire, j’ai revisionné la vidéo correspondante de l’atelier Casse-briques en dernier recours en essayant de bien comprendre (je pensais avoir compris, mais ce n’est visiblement pas le cas), mais rien n’y fait !
Pouvez-vous m’aider s’il vous plaît ?
Voici mon code :
-- Projet Pong -- Cette ligne permet d'afficher des traces dans la console pendant l'éxécution io.stdout:setvbuf('no') -- Cette ligne permet de déboguer pas à pas dans ZeroBraneStudio if arg[#arg]== "-debug" then require("mobdebog").start() end pad1 = {} pad1.x = 0 pad1.y = 0 pad1.hauteur = 80 pad1.largeur = 20 pad2 = {} pad2.x = 780 pad2.y = 0 pad2.hauteur = 80 pad2.largeur = 20 balle = {} balle.x = 0 balle.y = 0 balle.rayon = 12 balle.vx = 0 balle.vy = 0 function demarre () balle.colle = true end function love.load() largeur = love.graphics.getWidth() hauteur = love.graphics.getHeight() demarre() end function love.update(dt) if pad1.y <= hauteur - hauteur then pad1.y = hauteur - hauteur end if pad1.y >= hauteur - pad1.hauteur then pad1.y = hauteur - pad1.hauteur end if pad2.y <= hauteur - hauteur then pad2.y = hauteur - hauteur end if pad2.y >= hauteur - pad2.hauteur then pad2.y = hauteur - pad2.hauteur end if balle.colle == true then balle.x = pad1.x + (pad1.largeur + balle.rayon) balle.y = pad1.y + (pad1.hauteur / 2) else balle.x = balle.x + (balle.vx*dt) balle.y = balle.y + (balle.vy*dt) end if balle.y > hauteur then balle.vy = 0 - balle.vy end if balle.y < 0 then balle.vy = 0 - balle.vy end if balle.x < 0 then balle.colle = true end if balle.x > largeur then balle.colle = true end -- Début du problème (ça fait bugger tout mon code :') ) CollisionPad2 = pad2.x - balle.rayon if balle.x > CollisionPad2 then dist = math.abs(pad2.y - balle.y) if dist < pad2.hauteur/ 2 then balle.vx = - pad2.x + balle.vx balle.x = CollisionPad2 end CollisionPad1 = pad1.largeur + balle.rayon if balle.x > CollisionPad1 then dist = math.abs(pad1.y - balle.y) if dist < pad1.hauteur/ 2 then balle.vx = pad1.largeur - balle.vx balle.x = CollisionPad1 end end -- Fin du problème 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("fill", balle.x, balle.y, balle.rayon) end function love.keypressed(key, scancode, isrepeat) if key == "z" then pad1.y = pad1.y - (pad1.hauteur / 1.5) end if key == "s" then pad1.y = pad1.y + (pad1.hauteur / 1.5) end if key == "up" then pad2.y = pad2.y - (pad2.hauteur / 1.5) end if key == "down" then pad2.y = pad2.y + (pad2.hauteur / 1.5) end -- Petit problème dans le coin, si j'appuie plusieurs fois sur barre espace (changement de direction de la balle, comme au lancement du jeu) if key == "space" then balle.colle = false balle.vx = 200 balle.vy = 200 end end end
Merci d’avance !
-
08/09/2020 à 10:41 #66417
C’est bon, problème réglé !
-
-
AuteurMessages
Vous lisez 1 fil de discussion
- Vous devez être connecté pour répondre à ce sujet.