cocos2dx plist和batchNode总结

来源:互联网 发布:伴生活智能门禁 知乎 编辑:程序博客网 时间:2024/06/07 21:27

之前写过对sprite的理解,实际上就是对图片的加载,不可避免的要进行IO操作。那么如果项目中的图片使用的很多,那么就要进行多次的I/O,浪费cpu的资源。那我们很自然的就想到,是否可以将图片打包,一次性的加载进来呢? 这是可以的。我们可以使用TexturePacker工具,将图片进行打包成plist文件,然后直接加载plist文件就可以了。


1. 打包的图片是可以进行加密的,这样可以更好的保护自己的作品



3.如果对图片的质量要求高,建议使用image format中建议使用RGBA8888,最后一定要注意图片的大小最好是2的n次方,这样方便内存的加载。(因为显卡的内存是这样进行加载的,毕竟计算机底层实现是2进制的,虽然现在的计算机对显卡进行了优化,但是还是建议自己手动适配好图片大小,节省cpu资源)

4. 打包完成后,就可以直接加载了!加载前,我们可以先考虑下,因为这是个打包文件,占用的内存肯定不小,那么我们就不希望在游戏运行的时候进行加载,因为这样会造成游戏的卡,显然影响了游戏的用户体验。那么我们应该在什么时候加载呢? 一个是在程序开始的时候,一个做loading画面的时候,我觉得这2个时候,是最好的加载时机。

这样一句代码,就可以加载完成了


5. 此时加载完成了,只是完成了图片一次性放到内存,减少了I/O操作。还有openGL的渲染,此时还是对打包的图片中的各个小图片进行单个的渲染,也是会浪费GPU的资源的。我们可以通过CCBatchNode,告诉GPU一次性的渲染整个大图片就可以了。

6. 在cocos2d中CCBatchNode是要指定容量大小的(这里可以理解CCBatchNode是一个容器),但是在2dx中,可以查看源代码,是没有容器大小这个参数的,而是直接渲染打包图片。要注意这个不同点

7. 最后,因为现在图片都是CCBatchNode的child,所以他们的Zorder都是参照CCBatchNo的Zorder了!这个是必须要清楚的!


总结:

纹理就是一次性的将多个图片加载到内存中,并有对应小图片的位置信息,当需要使用其中某张小图片的时候,就直接在内存中调用,这样减少了I/O的操作。



0 0
原创粉丝点击