Notre rotation actuel

Jusqu’à présent on a utilisé un variable qui augmente à l’infini pour faire tourner notre image.

function love.update(dt)
  vaisseau.rotate = vaisseau.rotate + dt
end

Amélioration pour une utilisation du clavier

Pour cela il faut détecter l’appui de deux touches, une première touche pour la rotation négative et une autre pour la rotation positive.

  • « q » ou « left » pour réduire
  • « d » ou « right » pour augmenter
  • une vitesse de rotation attachée à notre object vaisseau : vaisseau.speedRotate = 5
function love.update(dt)
  if love.keyboard.isDown("q") or love.keyboard.isDown("left") then
    vaisseau.rotate = vaisseau.rotate - (vaisseau.speedRotate *  dt)
  elseif love.keyboard.isDown("d") or love.keyboard.isDown("right") then
    vaisseau.rotate = vaisseau.rotate + (vaisseau.speedRotate * dt)
  end
end

Modification de l’utilisation du rectangle

On va enlever le rectangle.

Puis le remplacer par un Cercle, car comme notre vaisseau tourne (en rond), cela crée donc un Cercle.

Nous utiliserons les points X et Y de notre vaisseau comme origine du cercle.

Définir la dimension la plus petite comme rayon !

Selon son orientation, il faut utiliser soit l’ox, soit l’oy de l’image.

Pour une image en mode Portrait, on utilisera OY comme Rayon :

Pour une image en mode Paysage, on utilisera OX comme Rayon :

Pour définir le bon côté à tous les coups sans vous prendre la tête voici une astuce avec l’utilisation de fonctions !

les fonctions math.min() et math.max() très utiles !

-- Exemples :

-- math.min(args)
-- Retourne le minimum des valeurs mise en arguments.
math.min(1,2)
return 1

math.min(1.2, 7, 3)
return 1.2

math.min(1.2, -7, 3)
return -7

-- math.max(args)
-- Retourne le maximum des valeurs mises en arguments.

math.max(1.2, -7, 3)
return 3

math.max(1.2, 7, 3)
return 7

Définir le rayon avec math.max()

vaisseau.rayon = math.max(vaisseau.ox, vaisseau.oy)

Dessinons le Cercle

function love.draw()

  -- son contour vert :
  love.graphics.setColor(color.green)
  --love.graphics.rectangle("line", vaisseau.x, vaisseau.y, vaisseau.w, vaisseau.h)
  love.graphics.circle("line", vaisseau.x, vaisseau.y, vaisseau.rayon)


end

Le Code Complet :

local vaisseau = {}

vaisseau.imageData = love.graphics.newImage("vaisseau.png")
vaisseau.w , vaisseau.h = vaisseau.imageData:getDimensions()
vaisseau.ox = vaisseau.w/2
vaisseau.oy = vaisseau.h/2
vaisseau.rayon = math.max(vaisseau.ox, vaisseau.oy)

vaisseau.x, vaisseau.y = 300, 250

vaisseau.rotate = 0

vaisseau.speedRotate = 5

local color = {} --  color = {r,g,b,a}
color.white =   {1,   1,    1,    1}
color.blue =    {0,   0,    1,    0.8}
color.green =   {0,   1,    0,    0.8}

function love.update(dt)
  if love.keyboard.isDown("q") or love.keyboard.isDown("left") then
    vaisseau.rotate = vaisseau.rotate - (vaisseau.speedRotate *  dt)
  elseif love.keyboard.isDown("d") or love.keyboard.isDown("right") then
    vaisseau.rotate = vaisseau.rotate + (vaisseau.speedRotate * dt)
  end
end

function love.draw()

  -- l'image du vaisseau :
  love.graphics.setColor(color.white)
  love.graphics.draw( vaisseau.imageData, vaisseau.x, vaisseau.y, vaisseau.rotate, vaisseau.sx, vaisseau.sy, vaisseau.ox, vaisseau.oy)

  -- son contour vert :
  love.graphics.setColor(color.green)
  love.graphics.circle("line", vaisseau.x, vaisseau.y, vaisseau.rayon)

  -- le point d'origine de l'image en bleue:
  love.graphics.setColor(color.blue)
  love.graphics.circle("fill", vaisseau.x, vaisseau.y, 5)

end