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
代码https://gitcafe.com/dwdcth/love2d-tutor
控制绘图的先后顺序,即在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
相关文章推荐
- love2d教程12--画布和批量绘图
- love2d教程2--绘图和文字
- Android opengl 2d绘图/贴图详细教程
- love2d教程32--碎图打包器texturepacker
- love2d教程28--血条
- [Qt教程] 第18篇 2D绘图(八)双缓冲绘图
- love2d教程4--材质和贴图
- [Qt教程] 第11篇 2D绘图(一)绘制简单图形
- love2d教程19--背包修正
- Android学习教程之2D绘图基础及绘制太极图
- love2d教程9--角色移动
- iOS绘图教程--Quartz 2D(CoreGraphics.framework) 详解
- [Qt教程] 第12篇 2D绘图(二)渐变填充
- love2d教程24--碰撞跳跃
- Java标准教程:Java 2D绘图--第2章 从绘图开始
- love2d教程21--定时器
- Love2d新手入门教程之贪吃蛇(附源码)
- Swift操作Quartz 2D进行简单的绘图与坐标变换的教程
- [Qt教程] 第19篇 2D绘图(九)图形视图框架(上)
- love2d教程5--摄相机1视角跟随玩家