Communauté

Pourquoi le Lander ...
 
Notifications
Retirer tout

Pourquoi le Lander ne décolle-t-il pas...?

2 Posts
2 Utilisateurs
0 Likes
1,218 Vu
0
Début du sujet

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

 

 

Iguanodon Début du sujet 17/12/2022 11:58

et si ça peut servir, mes trois Sprite Ship, Engine et PlateForme



 

1 Réponse
0

@iguanodon 

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. 

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.