我想在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中旋转图像的简单例子吗?
答案 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中使用秒数),你的代码对我来说非常合适。
如果您向我们提供更多信息,我们将能够更好地帮助您,并可能重现您的错误 当你说
当我尝试加载图片时,我似乎无法使其工作
..结果是什么? 图像是白色的盒子吗?应用程序崩溃了吗?屏幕上什么都没有?
所有这些都意味着图像加载问题,而不是轮换问题。虽然,可能是图像旋转离开屏幕的情况。
如果您继续使用translate
,rotate
和scale
(这通常是一个好主意),我建议您查看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
参数后面的参数,将其设置为图像宽度的一半和高度的一半。