概念
本节课讲了cocos中的批处理纹理绘图,一般情况下,每绘制一个精灵,都需要绘制一个纹理,而cocos中提供批处理纹理绘图SpriteBatchNode,查阅官方文档 http://www.cocos.com/doc/cocos2d-x-3.0/dd/d2f/classcocos2d_1_1_sprite_batch_node.html#details 这其中对SpriteBatchNode的解释如下:
SpriteBatchNode与批量节点类似,如果包含子节点会在一次OpenGL调用内绘制完成(一般称为”batch draw”)
一个SpriteBatchNode可以引用一个且只有一个纹理(一个图像文件或一个纹理集),只有包含该纹理的Sprite可以加入到SpriteBatchNode中。 加入SpriteBatchNode的所有Sprite在一次OpenGL ES调用内绘制完成,而未加入SpriteBatchNode的Sprite每一个都需要单独调用OpenGL ES绘制,这样效率比较低。
限制:
只有Sprite或Sprite的子类对象才允许作为子节点(或孙子节点,等等)加入到SpriteBatchNode中,例如:particles、labels和layer不能加入SpriteBatchNode。
所有子节点的”alias”属性必须统一为Aliased或Antialiased,不能二者同时存在,因为”alias”是纹理的属性,而SpriteBatchNode全部的子节点共用一个纹理。
由cocos官方文档可见,cocos中批处理纹理绘图,可以使多个Sprite在一个OpenGL ES调用内绘制完成,很明显,这样减少了Sprite绘制的次数,从而提高画面渲染的效率。
作业
使用SpriteBatchNode的代码如下:
1 | var HelloWorldLayer = cc.Layer.extend({ |
本节课内容的api介绍很简单,重点是要理解SpriteBatchNode的运作原理,具体查阅官方文档就能明白,很多时候程序中可以通过SpriteBatchNode来优化Sprite渲染次数,从而提高运行效率。
最终效果
http://www.cocoscvp.com/usercode/2016_04_23/5608bd70128bddf09770f642e784f35643acadc9/