Love2d Rotar una imagen
Frecuentes
Visto 8,028 veces
2
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?
5 Respuestas
6
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
3
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
, rotate
y 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
0
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
0
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
0
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 image lua rotation love2d or haz tu propia pregunta.
"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