Nous avons vu récemment comment déterminer le nouveau point d’un Objet avec son Vecteur et son Angle avec la formule suivante :

-- déplacement avec un angle 
Objet.x = Objet.x + (math.cos(Objet.angleRadian) * Objet.speed)
Objet.y = Objet.y + (math.sin(Objet.angleRadian) * Objet.speed)

La Formule avec le DeltaTime, il suffit simplement de multiplier la distance par le delatime !

La Formule avec le DeltaTime :

function love.update(dt)
    -- déplacement avec un angle et le deltatime
    Objet.x = Objet.x + (math.cos(Objet.angleRadian) * Objet.speed * dt)
    Objet.y = Objet.y + (math.sin(Objet.angleRadian) * Objet.speed * dt)
end


Exemple Simple :

Créons un Objet de Type Cercle que l’on appelera Circle.

il possède un point x=400 et y=300

il possède aussi un rayon de 20 et une vitesse de 600.

il possède un angle par défaut à 0. la touche « z » nous servira à le faire avancer avec le DeltaTime.

la touche « s » nous servira à le faire reculer avec le DeltaTime.

les touche « q » et « d » nous servirons à baisser ou augmenter son angle avec la valeur du DeltaTime.

  Création de l’objet et de son affichage :

local Circle = {}
Circle.x = 400
Circle.y = 300
Circle.rayon = 20
Circle.vitesse = 600
Circle.angle = 0

function love.draw()
  love.graphics.circle("fill", Circle.x, Circle.y, Circle.rayon)
end

Rendu :

Ajout des contrôles du clavier :

function love.update(dt)

  -- rotations de l'angle : augmente ou diminue
  if love.keyboard.isDown("q") then -- diminue l'angle
    Circle.angle = Circle.angle - (10 * dt)
  end
  --
  if love.keyboard.isDown("d") then -- augmente l'angle
    Circle.angle = Circle.angle + (10 *dt)
  end

  -- mouvements : avance ou recule
  if love.keyboard.isDown("z") then -- avance
    Circle.x = Circle.x + math.cos(Circle.angle) * Circle.vitesse * dt
    Circle.y = Circle.y + math.sin(Circle.angle) * Circle.vitesse * dt
  end
  --
  if love.keyboard.isDown("s") then -- recule
    Circle.x = Circle.x + math.cos(Circle.angle) * (0-Circle.vitesse) * dt
    Circle.y = Circle.y + math.sin(Circle.angle) * (0-Circle.vitesse) * dt
  end

end
--

Code Complet :

love.window.setTitle("Faconkode.fr : Déplacement d'un Objet avec son angle")
 
local Circle = {}
Circle.x = 400
Circle.y = 300
Circle.rayon = 20
Circle.vitesse = 60
Circle.angle = 0
 
function math.angle(x1,y1, x2,y2) return math.atan2(y2-y1, x2-x1) end
 
 
function love.update(dt)
 
  -- rotations de l'angle : augmente ou diminue
  if love.keyboard.isDown("q") then -- diminue l'angle
    Circle.angle = Circle.angle - (2 * dt)
  end
  --
  if love.keyboard.isDown("d") then -- augmente l'angle
    Circle.angle = Circle.angle + (2 *dt)
  end
 
  -- mouvements : avance ou recule
  if love.keyboard.isDown("z") then -- avance
    Circle.x = Circle.x + math.cos(Circle.angle) * Circle.vitesse * dt
    Circle.y = Circle.y + math.sin(Circle.angle) * Circle.vitesse * dt
  end
  --
  if love.keyboard.isDown("s") then -- recule
    Circle.x = Circle.x + math.cos(Circle.angle) * (0-Circle.vitesse) * dt
    Circle.y = Circle.y + math.sin(Circle.angle) * (0-Circle.vitesse) * dt
  end
 
end
--
 
function love.draw()
  -- dessin du Circle
  love.graphics.circle("fill", Circle.x, Circle.y, Circle.rayon)
  
  -- dessin de l'angle
  love.graphics.print("Circle.angle = "..Circle.angle)
  local distLine = 35
  love.graphics.line(Circle.x, Circle.y,  Circle.x+(math.cos(Circle.angle) * distLine), Circle.y+(math.sin(Circle.angle) * distLine) )
end
--

Optimisation, avec la mise à jour de l’angle avec la souris :

  L’angle de notre Objet, Il sera défini avec le point du Cercle et le point de la position de la Souris, ces points formeront ainsi son angle directeur. Rappel, la fonction math.angle() :

function math.angle(x1,y1, x2,y2) return math.atan2(y2-y1, x2-x1) end
  • utilisation de la fonction math.angle() pour trouver l’angle entre le Cercle vers la Souris
  • utilisation de math.anbgle() dans love.update(dt)
love.window.setTitle("Faconkode.fr : Déplacement d'un Objet avec son angle")

local Circle = {}
Circle.x = 400
Circle.y = 300
Circle.rayon = 20
Circle.vitesse = 60
Circle.angle = 0

function math.angle(x1,y1, x2,y2) return math.atan2(y2-y1, x2-x1) end


function love.update(dt)

  -- mise a jour de l'angle avec la souris :
  Circle.angle = math.angle(Circle.x, Circle.y,   love.mouse.getX(), love.mouse.getY())

  -- mouvements : avance ou recule
  if love.keyboard.isDown("z") then -- avance
    Circle.x = Circle.x + math.cos(Circle.angle) * Circle.vitesse * dt
    Circle.y = Circle.y + math.sin(Circle.angle) * Circle.vitesse * dt
  end
  --
  if love.keyboard.isDown("s") then -- recule
    Circle.x = Circle.x + math.cos(Circle.angle) * (0-Circle.vitesse) * dt
    Circle.y = Circle.y + math.sin(Circle.angle) * (0-Circle.vitesse) * dt
  end

end
--

function love.draw()
  -- dessin du Circle
  love.graphics.circle("fill", Circle.x, Circle.y, Circle.rayon)

  -- dessin de l'angle
  love.graphics.print("Circle.angle = "..Circle.angle)
  local distLine = 35
  love.graphics.line(Circle.x, Circle.y,  Circle.x+(math.cos(Circle.angle) * distLine), Circle.y+(math.sin(Circle.angle) * distLine) )
  
  -- commandes
  love.graphics.print("Press Z or S for Forward/Backward".."n".."The Mouse is Directional Angle", 0, 20)
end
--