love2d教程7--绘图顺序

zorder用来控制绘图的先后顺序,可惜love2d里没有zorder,我们需要自己

控制绘图的先后顺序,即在love.draw()回掉函数中的先后顺序.可是这带来

了不便当有很多绘图动作时,代码太多便弄不清先后了.

我们可以自己增加一个z顺序的函数,每次添加绘图对象时,便把顺序设置好.

这里我把zorder的取值范围设为0.0--1.0,值越下越靠近屏幕,值越大越远

离屏幕,可以把zorder视为绘图对象离屏幕的距离.

 

下面我们来把下面三张图合成为以幅完整的图:

图片来自http://en.wikipedia.org/wiki/Parallax_scrolling

下面是显示效果:左边的使用zorder,右边的不按顺序.

代码很简单,如下:

main.lua

local zorder={}
--z的取值越小越靠近屏幕,默认值0
function setZ(drawabl, z)
    --z的默认值为0
    z=z or 0
    if z<=1 and z>=0 then
            table.insert(zorder,{drawabl,z})
    else
            print("zorder must between 0 and 1")
    end
    table.sort(zorder, function(a,b) return a[2]>b[2] end)

end

function love.load()
    imgs={}
    for i=1,3 do
        table.insert(imgs,love.graphics.newImage("assets/img" .. i .. ".png"))
    end
end

function love.draw()
    --直接绘图,不注意顺序
    love.graphics.draw(imgs[2],400,200)
    love.graphics.draw(imgs[1],400,200)
    love.graphics.draw(imgs[3],400,200)

    setZ(imgs[2],0.2)
    setZ(imgs[1],0.3)
    setZ(imgs[3],0.1)
    for _,v in ipairs(zorder) do
        love.graphics.draw(v[1],200,200)
    end
end

代码https://gitcafe.com/dwdcth/love2d-tutor

posted @ 2012-12-22 12:13  半山th  阅读(1419)  评论(4编辑  收藏  举报