Love2d旋转图像

时间:2012-05-22 18:39:09

标签: image lua rotation love2d

我想在Love2D中旋转图像。 我在love2d.org上找到了一个文档:https://love2d.org/wiki/love.graphics.rotate 但是当我尝试加载图像时,我似乎无法让它工作。 继承我的代码:

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

有人能给我看一个在love2d中旋转图像的简单例子吗?

5 个答案:

答案 0 :(得分:6)

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

最好使用第四个参数,显示为'r'来旋转图像,例如:

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

使用translate函数也是一个相当不错的主意,你最好为每个图像赋予x和y位置,除非你做了像偏移整个地图这样的事情,在这种情况下它可以节省计算时间(或至少代码的长度和复杂性)。 (当然还有其他一些非常有用的情况)。

答案 1 :(得分:3)

除了一个小小的无关问题(love.timer.sleep在LÖVE0.8.0中使用秒数),你的代码对我来说非常合适。

如果您向我们提供更多信息,我们将能够更好地帮助您,并可能重现您的错误 当你说

  

当我尝试加载图片时,我似乎无法使其工作

..结果是什么? 图像是白色的盒子吗?应用程序崩溃了吗?屏幕上什么都没有?

所有这些都意味着图像加载问题,而不是轮换问题。虽然,可能是图像旋转离开屏幕的情况。


如果您继续使用translaterotatescale(这通常是一个好主意),我建议您查看push和{ {3}}功能。
它们允许您“堆叠”转换,以便您可以渲染子元素。

示例用法是渲染GUI(每个孩子推动其翻译然后渲染子项)并在滚动地图上绘制精灵(摄像机翻译整个地图然后for entity in entities do push() entity:draw() pop() end。每个实体都可以翻译和旋转在本地坐标(0,0 =精灵中心))。

答案 2 :(得分:0)

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

R是旋转..为什么不将它设置为变量并根据需要进行更改? ...我是编程的新手,所以我可能错了,但我就是这样做的。

答案 3 :(得分:0)

使用LOVE 11.3(神秘之谜)在图像中心旋转的示例:

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

答案 4 :(得分:0)

通常,旋转轴为左上角。要将轴居中放置在图像的中间,必须使用r参数后面的参数,将其设置为图像宽度的一半和高度的一半。