2

我想在 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中旋转图像的简单示例?

4

5 回答 5

6

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

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

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

使用 translate 函数也是一个相当糟糕的主意,最好为每个图像提供 x 和 y 位置,除非您正在执行诸如偏移整个地图之类的操作,在这种情况下它可以节省计算时间(或者在至少代码的长度和复杂性)。(当然还有其他情况下它非常有用)。

于 2012-05-22T18:45:47.320 回答
3

除了一个不相关的小问题(love.timer.sleep在 LÖVE 0.8.0 中使用秒数)之外,您的代码对我来说非常有效。

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

当我尝试加载图像时,我似乎无法让它工作

..结果是什么?图像是白框吗?应用程序会崩溃吗?屏幕上什么都没有?

所有这些都意味着图像加载问题,而不是旋转问题。虽然,可能是图像从屏幕上旋转出来的情况。


如果你继续使用translate, rotate, and scale(这通常是个好主意),我建议你看看pushandpop函数。
它们允许您“堆叠”转换,以便您可以渲染子元素。

示例用途是渲染一个 GUI(每个孩子推动它的平移,然后渲染孩子)和在滚动地图上绘制精灵(相机平移整个地图,然后做for entity in entities do push() entity:draw() pop() end。每个实体可以在本地坐标中平移和旋转(0,0 =精灵的中心))。

于 2012-05-23T07:35:12.850 回答
0
love.graphics.draw( drawable, x, y, r, sx, sy, ox, oy, kx, ky )

R是旋转..你为什么不把它设置为一个变量并随意改变它?...我是编程新手,所以我可能错了,但这就是我的做法。

于 2015-08-15T16:15:13.147 回答
0

使用 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
于 2019-12-29T02:39:51.780 回答
0

通常,旋转的轴是左上角。要将轴居中到图像的中间,您必须使用参数后的r参数到图像的一半宽度和一半高度。

于 2020-09-13T09:37:17.380 回答