Love2d Rotar una imagen

Me gustaría rotar una imagen en Love2D. He encontrado una documentación en love2d.org: https://love2d.org/wiki/love.graphics.rotate Pero parece que no puedo hacer que funcione cuando intento cargar una imagen. Aquí está mi código:

local angle = 0

function love.load()
    g1 = love.graphics.newImage("1.png") 
end

function love.draw()
    width = 100
    height = 100
    love.graphics.translate(width/2, height/2)
    love.graphics.rotate(angle)
    love.graphics.translate(-width/2, -height/2)
    love.graphics.draw(g1, width, height)
end

function love.update(dt)
    love.timer.sleep(10)
    angle = angle + dt * math.pi/2
    angle = angle % (2*math.pi)
end

¿Alguien podría mostrarme un ejemplo simple de rotar una imagen en love2d?

preguntado el 22 de mayo de 12 a las 19:05

5 Respuestas

https://love2d.org/wiki/love.graphics.draw

Es mejor que utilice el cuarto argumento, que se muestra como 'r' para rotar imágenes, como:

love.graphics.draw(image, x, y, math.pi/4)

También es una idea bastante mala usar las funciones de traducción, es mucho mejor dar una posición x e y para cada imagen, a menos que esté haciendo algo como desplazar un mapa completo, en cuyo caso podría ahorrar tiempo de cálculo (O al menos menos la longitud y la complejidad de su código). (Por supuesto, hay otras situaciones en las que resulta muy útil).

contestado el 27 de mayo de 12 a las 20:05

"También es una idea bastante mala usar las funciones de traducción": ¿en qué se basa para afirmar esto? - Deco

Recomiendo eliminar esa parte de la respuesta. Las funciones de traducción funcionan muy bien. Simplemente son más engorrosos para dibujar imágenes que simplemente usar los parámetros en ´love.graphics.draw´. - kikito

Mencioné que hay muchas veces que resulta útil. Simplemente estoy señalando que puede estropear muchas cosas si está compensando todo el sistema de coordenadas. - ashley davies

Por supuesto, si está utilizando push and pop como sugiere Deco, entonces no hay una diferencia real y podría hacer que su código sea mucho más simple. - ashley davies

Su código funcionó perfectamente para mí, aparte de un pequeño problema no relacionado (love.timer.sleep usa segundos en LÖVE 0.8.0).

Podremos ayudarte mejor, y quizás reproducir tu error, si nos proporcionas más información.
Cuando tu dices

Parece que no puedo hacer que funcione cuando intento cargar una imagen

..¿Cual es el resultado? ¿La imagen es un cuadro blanco? ¿Se bloquea la aplicación? ¿No hay nada en la pantalla?

Todo esto implica un problema de carga de imágenes, en lugar de un problema de rotación. Aunque, podría darse el caso de que la imagen gire fuera de la pantalla.


Si continúa usando translate, rotatey scale (que suele ser una buena idea), te recomiendo que eches un vistazo a la push y pop funciones.
Le permiten 'apilar' transformaciones para que pueda representar subelementos.

Los usos de ejemplo son representar una GUI (cada niño empuja su traducción y luego representa a los niños) y dibujar sprites en un mapa de desplazamiento (la cámara traduce el mapa completo y luego hace for entity in entities do push() entity:draw() pop() end. Cada entidad puede trasladarse y rotar en coordenadas locales (0,0 = centro del sprite)).

contestado el 24 de mayo de 12 a las 04:05

El programa simplemente falla. Ves un segundo la imagen y luego se bloquea. Y voy a buscar en empujar y hacer estallar - Dallox

Eventualmente conseguí que funcionara, pero alil diferente usé esto: pastebin.com/DjQNej9e Pero por alguna razón, cuando quiero seguir girando la imagen, simplemente falla: Dallox

while true do stuff end congelará su programa. El bucle se ejecutará para siempre y nunca llegará al final de su love.draw función, lo que significa que nunca se presentará una imagen en la pantalla (y su aplicación se bloqueará). - Deco

love.graphics.draw( drawable, x, y, r, sx, sy, ox, oy, kx, ky )

la R es la rotación... ¿por qué no la estableces en una variable y la cambias como quieras? ... Soy nuevo en la programación, así que puedo estar equivocado, pero así es como lo haría.

Respondido 15 ago 15, 17:08

Ejemplo de rotación en el centro de la imagen usando LOVE 11.3 (Mysterious Mysteries):

function love.draw()
    love.graphics.draw(img, 400,300, wheel.r, wheel.sx, wheel.sy, wheel.w / 2,  wheel.h / 2)
end

function love.update(dt)
    wheel.r = wheel.r + dt  
end

function love.load()
    wheel = {x = 0, y = 0, w = 0, h = 0, sx = 0.5, sy = 0.5, r = 0, image = "wheel.png"}
    img = love.graphics.newImage(wheel.image)
    wheel.w = img:getWidth()
    wheel.h = img:getHeight()               
end

Respondido el 29 de diciembre de 19 a las 02:12

Normalmente el eje para rotar es la esquina superior izquierda. Para centrar el eje en el medio de una imagen, debe usar los parámetros después del r parámetro a la mitad del ancho y la mitad de la altura de la imagen.

Respondido el 13 de Septiembre de 20 a las 10:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.