【问题标题】:Love2d Rotating an imageLove2d 旋转图像
【发布时间】:2012-05-29 07:09:41
【问题描述】:

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

【问题讨论】:

    标签: image lua rotation love2d


    【解决方案1】:

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

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

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

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

    【讨论】:

    • “使用翻译功能也是一个相当糟糕的主意” - 你有什么理由这么说?
    • 我建议删除那部分答案。翻译功能工作得很好。与仅使用“love.graphics.draw”中的参数相比,它们绘制图像更麻烦。
    • 我确实提到过很多时候它很有用。我只是指出,如果你要偏移整个坐标系,它会搞砸很多事情。
    • 当然,如果您按照 Deco 的建议使用 push 和 pop,那么没有真正的区别,它可以让您的代码更简单。
    【解决方案2】:

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

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

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

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

    所有这些都意味着图像加载问题,而不是旋转问题。不过,也可能是图像在屏幕外旋转。


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

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

    【讨论】:

    • 程序崩溃了。您看到图像一秒钟,然后它崩溃了。我会研究 push 和 pop
    • 最终我让它工作了,但我使用了这个:pastebin.com/DjQNej9e 但由于某种原因,当我想继续旋转图像时,它只会崩溃
    • while true do stuff end 将冻结您的程序。循环将永远运行,并且永远不会到达您的 love.draw 函数的末尾,这意味着永远不会在屏幕上显示图像(并且您的应用程序将锁定)。
    【解决方案3】:
    love.graphics.draw( drawable, x, y, r, sx, sy, ox, oy, kx, ky )
    

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

    【讨论】:

      【解决方案4】:

      使用 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
      

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-11-05
          • 2016-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多