在使用Layabox的2d精灵时,我们会需要很多渲染图片的需求,那么,如果做到使用最小的代价实现图片的渲染呢。
合并图集
为什么要合并图集呢。如果你一个图片是由多张图片组成的,正常情况,在webgl模式下,渲染一张图片,就是一次drawcall,但是呢,如果纹理没有切换,只是切换渲染的位置,Layabox会自动给你合批,你相当于一次drawcall就实现了整张图片的渲染。
这个问题发现是我之前测试过官网的瓦块图时,发现设置cacheAs为normal时,它的drawcall只需要一次。而我自己设置的瓦块图,需要渲染多少个瓦块,就有多少drawcall。后来就发现了这个,如果当前的瓦块都属于一张图集,那么,自动合批,会一次性给你渲染出来。
所以,如果都是一个精灵使用的,而且图片还不大,可以合并成一张图片使用,可以降低性能损耗。
设置cacheAs
如果出现多个单个图片,或者无法合并成图集的情况。我们还要想办法降低性能。那就是用到cacheAs方法,这个属性有三个值,'none’就是默认,不缓存。‘normal’就是正常缓存,会把你的精灵渲染的内容,生成graphics的命令模式,但是性能降低不是很多,多张图片切换,还是有很多的drawcall。‘bitmap’直接将渲染完成的纹理缓存起来,这种会增加内存和缓存的占用,如果你的一张精灵就几千次drawcall渲染出来,使用这种方式你可以节省几千次的drawcall。
那么,如果地图过大的话,我们就要灵活使用,即不能占用太大的内存和缓存,还能减少drawcall的方法。
我的实现方式,是增加地图块对象,每个地图块固定宽高,把整个地图分成多张地图块。根据当前地图显示范围进行显示隐藏。显示,设置精灵的cacheAs为’bitmap’,并渲染一次即可。而无法显示的瓦块,我们可以把cacheAs设置为’none’,并且将其graphics调用clear事件清空画布。
希望我总结的经验,能让大家有些收获。