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
作者:半山
出处:http://www.cnblogs.com/xdao/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。