Love2d旋转图像

3

我想在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个回答

8

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

如果需要旋转图像,使用第四个参数 'r' 更为方便,例如:

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

如果只是单个绘图,使用翻译功能并不值得麻烦,最好在批量绘制时再使用。


1
“使用翻译功能也是一个相当糟糕的想法”,您基于什么理由做出这样的说法? - Deco
1
我建议删除答案中的那部分内容。翻译函数工作得非常好。但是,与仅使用´love.graphics.draw´中的参数相比,它们绘制图像更加繁琐。 - kikito
我确实提到了很多时候它非常有用。我只是指出,如果你偏移了整个坐标系,它可能会破坏很多东西。 - Ashley Davies
当然,如果您像Deco建议的那样使用push和pop,那么实际上没有什么区别,这可能会使您的代码更简单。 - Ashley Davies

3

您的代码对我来说完美无缺,除了一个小问题(love.timer.sleep在LÖVE 0.8.0中使用秒)。

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

我似乎无法在尝试加载图像时使其工作

..结果是什么? 图像是白色框?应用程序崩溃了吗?屏幕上没有任何东西吗?

所有这些都暗示着出现了图像加载问题,而不是旋转问题。虽然,情况可能是图像正在屏幕外旋转。


如果您继续使用 translaterotatescale(这通常是个好主意),我建议您查看 pushpop 函数。
它们允许您“堆叠”变换,以便渲染子元素。

示例用途是渲染 GUI(每个子元素都推送其翻译,然后渲染子元素)和在滚动地图上绘制精灵(相机翻译整个地图,然后执行 for entity in entities do push() entity:draw() pop() end。每个实体可以在本地坐标系(0,0=精灵中心)中进行平移和旋转)。


程序总是崩溃。你只能看到图像一秒钟,然后它就崩溃了。我会查看推入和弹出。 - Dallox
最终我搞定了,但是有点不一样,我用了这个:http://pastebin.com/DjQNej9e 但是出于某种原因,当我想要持续旋转图像时,它就会崩溃。 - Dallox
while true do stuff end会冻结您的程序。循环将永远运行,永远不会到达您的love.draw函数的结尾,这意味着图像永远不会呈现在屏幕上(并且您的应用程序将被锁定)。 - Deco

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

R是旋转参数,为什么不将其设置为变量并根据需要更改呢?...我刚开始学习编程,可能有所错误,但这就是我会做的方式。


0

通常旋转的轴心是左上角。要将轴心居中到图像中央,您需要使用r参数后面的参数,将其设为图像宽度和高度的一半。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接