您的位置:首页 > 其它

love2d教程7--绘图顺序

2012-12-22 12:13 375 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: