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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值