Pourquoi le Lander ne décolle-t-il pas...?
Bonsoir, après avoir perdu mon latin, j'attaque le grec. J'ai vraiment une difficulté, et bien du temps passé, si, si... Je dois laisser une erreur quelque part. je suis perdu dans l'espace sidéral de mon ignorance... 🤣 Pourquoi donc ce fichu Lander ne bouge-t-il pas son c... ?
(Désolé pour le paquet de code, mais c'est sans doute mieux de donner le tout...)
--< Traces dans la console pendant l'exécution >-- io.stdout:setvbuf('no') local Lander = {} Lander.x = 0 Lander.y = 0 Lander.angle = 270 Lander.vx = 0 Lander.vy = 0 Lander.speed = 3 Lander.img = love.graphics.newImage("images/ship01.png") Lander.ox = Lander.img:getWidth()/2 Lander.oy = Lander.img:getHeight()/2 Lander.centre_x = Lander.x - Lander.ox local Reacteur = {} Reacteur.img = love.graphics.newImage("images/engine.png") Reacteur.on = false local PlateFormeUn = {} PlateFormeUn.img = love.graphics.newImage("images/ptf01.png") PlateFormeUn.largeur = PlateFormeUn.img:getWidth() PlateFormeUn.hauteur = PlateFormeUn.img:getHeight() PlateFormeUn.ox = PlateFormeUn.img:getWidth()/2 PlateFormeUn.oy = PlateFormeUn.img:getHeight()/2 local rgb = {} rgb.R = 0 largeur_fenetre = love.graphics.getWidth() hauteur_fenetre = love.graphics.getHeight() local random_x = love.math.random(100, largeur_fenetre - PlateFormeUn.largeur) local random_y = love.math.random(100, hauteur_fenetre - 100) local base = {} base.x = 720 base.y = 570 base.largeur = 50 base.hauteur = 8 --------------------- function love.load() --------------------- centre_fenetre_x = largeur_fenetre / 2 centre_fenetre_y = hauteur_fenetre / 2 PlateFormeUn.x = centre_fenetre_x PlateFormeUn.y = centre_fenetre_y PlateFormeUn.centre_x = centre_fenetre_x end ------------------------- function love.update(dt) ------------------------- --< gravité down >-- Lander.vy = Lander.vy + 0.01 --< déplacement Lander >-- Lander.x = Lander.x + Lander.vx Lander.y = Lander.y + Lander.vy --< création de forces-directions x y par cos et sin >-- local angle_radian = math.rad(Lander.angle) local force_x = math.cos(angle_radian) * (Lander.speed * dt) local force_y = math.sin(angle_radian) * (Lander.speed * dt) --< si touche 'up' on/off : allumage-extinction du réacteur >-- --< et application des forces x y >-- if love.keyboard.isDown("up") then Lander.vx = Lander.vx + force_x Lander.vy = Lander.vy + force_y Reacteur.on = true else Reacteur.on = false end --< rotations droite et gauche >-- if love.keyboard.isDown("right") then Lander.angle = Lander.angle + (90 * dt) if Lander.angle > 360 then Lander.angle = 0 end end if love.keyboard.isDown("left") then Lander.angle = Lander.angle - (90 * dt) if Lander.angle < 0 then Lander.angle = 360 end end --< Pour limiter la vitesse... >-- if math.abs(Lander.vx) > 1 then if Lander.vx > 0 then Lander.vx = 1 else Lander.vx = -1 end end if math.abs(Lander.vy) > 1 then if Lander.vy > 0 then Lander.vy = 1 else Lander.vy = -1 end end --< Pour stopper le Lander ?...? >-- if math.abs(force_x) < 0.001 then force_x = 0 end if math.abs(force_y) < 0.001 then force_y = 0 end --< Pour atterrir sur la PlateFormeUn, sous un angle proche de la verticale, sinon rebond >-- if Lander.x + Lander.img:getWidth() > PlateFormeUn.x and Lander.x < PlateFormeUn.x + PlateFormeUn.largeur and Lander.y + Lander.oy >= PlateFormeUn.y and Lander.y + Lander.oy < PlateFormeUn.y + PlateFormeUn.hauteur then if Lander.angle > 250 and Lander.angle < 290 then Lander.vx = 0 Lander.vy = 0 Lander.angle = 270 rgb.R = 1 Lander.vx = Lander.vx + force_x Lander.vy = Lander.vy + force_y else Lander.vy = Lander.vy * - 1 end end end --------------------- function love.draw() --------------------- --< repères >-------------------------------------------------------- love.graphics.setColor(0.4,0.6,0.9,0.45) love.graphics.line(centre_fenetre_x, 0, centre_fenetre_x, hauteur_fenetre) love.graphics.line(0, centre_fenetre_y, largeur_fenetre, centre_fenetre_y) love.graphics.setColor(1,1,1,1) --< Base >----------------------------------------------------------- love.graphics.setColor(0.4,0.6,0.9,1) love.graphics.rectangle("fill", base.x, base.y, base.largeur, base.hauteur, 5, 5) love.graphics.line(base.x, base.y, base.x, base.y - 80) love.graphics.line(base.x + base.largeur, base.y, base.x + base.largeur, base.y - 80) love.graphics.setColor(1,1,1,1) --< PLATEFORME 1 >--------------------------------------------------- love.graphics.setColor(rgb.R,1,1,1) love.graphics.draw(PlateFormeUn.img, random_x, random_y,0, 1, 1, PlateFormeUn.ox, PlateFormeUn.oy) love.graphics.setColor(1,1,1,1) --< LANDER >--------------------------------------------------------- love.graphics.draw(Lander.img, base.x + base.largeur / 2, base.y - Lander.oy, math.rad(Lander.angle), 1, 1, Lander.ox, Lander.oy) --< REACTEUR >------------------------------------------------------- if Reacteur.on == true then love.graphics.draw(Reacteur.img, base.x + base.largeur / 2, base.y - Lander.oy, math.rad(Lander.angle), 1, 1,Lander.ox, Lander.oy) Reacteur.on = false end end
et si ça peut servir, mes trois Sprite Ship, Engine et PlateForme
Je ne comprends pas pourquoi tu utilise Lander.x et y puis base.x et y au moment du draw.
En fait il va falloir que tu prennes à trouver tes bugs tout simplement en faisant des prints pour vérifier les valeurs que tu utilises.
On peut tout trouver tout seul, on n'est pas obligé de poser tout le temps la question, à partir du moment où on met des prints pour vérifier les valeurs des variables qu'on utilise on peut trouver en quelques secondes le problème.
- 6 Forums
- 239 Sujets
- 842 Posts
- 2 En ligne
- 45.5 {numéro}K Membres