cocos2d-x学习笔记:SpriteBatchNode
2015-03-11 14:40
447 查看
SpriteBatchNode的作用大致可理解为:
在开发游戏时,当一个层中需要使用多个相同的图片进行渲染某个sprite时,为了避免同样的图片重复渲染,所以使用该类来创建精灵。代码大致如下:
上述代码中,两个精灵使用的是同一个图片,所以,在cocos2d-x2.2版本中,上面的代码会避免重复渲染同样的图片导致帧率下降。
但是在3.0的版本中,已经不推荐这么做了,以下引用来自
https://github.com/fusijie/Cocos2dx-Release-Note/blob/master/cocos2d-x_v3.0_release_notes.md#sprite-%E5%92%8C-spritebatchnode
v2.2 2.2版本中推荐的优化游戏方式是将
虽然使用
会触发断言)
当
这将导致当
所有的
虽然 v3.0 仍然支持
但是,为了能让 v3.0 有更好的表现,你必须要确保你的
贡献相同的纹理ID(把它们放在一个spritesheet中,就像使用
确保它们使用相同的着色器和混合函数(就像使用
如果这么做,
v2.2 和 v3.0 最大的区别在于:
但是如果你这么做,
总结:
保持将所有的精灵放在一张大的 spritesheet 中。
使用相同的混合函数(使用默认)
使用相同的着色器(使用默认)
不要将精灵添加到
只有当你需要一些额外的性能上提升(虽然很小),
在开发游戏时,当一个层中需要使用多个相同的图片进行渲染某个sprite时,为了避免同样的图片重复渲染,所以使用该类来创建精灵。代码大致如下:
SpriteBatchNode* node = SpriteBatchNode::create("test.png"); if( !node ) return false; this->addChild(node);
auto sprite1 = Sprite::create("test.png"); sprite2->setPosition(200 ,300); node->addChild(sprite1);
<pre name="code" class="cpp">auto sprite2 = Sprite::create("test.png"); sprite2->setPosition(300 ,300); node->addChild(sprite2);
上述代码中,两个精灵使用的是同一个图片,所以,在cocos2d-x2.2版本中,上面的代码会避免重复渲染同样的图片导致帧率下降。
但是在3.0的版本中,已经不推荐这么做了,以下引用来自
https://github.com/fusijie/Cocos2dx-Release-Note/blob/master/cocos2d-x_v3.0_release_notes.md#sprite-%E5%92%8C-spritebatchnode
Sprite 和 SpriteBatchNode
v2.2 2.2版本中推荐的优化游戏方式是将 SpriteBatchNode对象设置为
Sprite对象的父节点。
虽然使用
SpriteBatchNode对象仍然是一个非常好的优化游戏的方式,但是它仍然有一定的限制:
Sprite对象的孩子只能是
Sprite(否则,Cocos2d-x
会触发断言)
当
Sprite的父节点是
SpriteBactchNode时,不能添加
ParticleSystem作为
Sprite的子节点。
这将导致当
Sprite的父节点是
SpriteBatchNode时,不能使用
ParallaxNode
所有的
Sprite对象必须共享相同的纹理ID (否则,Cocos2d-x 会触发断言)
Sprite对象使用
SpriteBatchNode的混合函数和着色器。
虽然 v3.0 仍然支持
SpriteBatchNode(与之前的版本拥有相同的特效和限制),但是我们不鼓励使用它。相反,我们推荐直接使用
Sprite,不需要再它作为子节点添加到
SpriteBatchNode中。
但是,为了能让 v3.0 有更好的表现,你必须要确保你的
Sprite对象满足以下条件:
贡献相同的纹理ID(把它们放在一个spritesheet中,就像使用
SpriteBatchNode一样)
确保它们使用相同的着色器和混合函数(就像使用
SpriteBatchNode一样)
如果这么做,
Sprites将会像使用
SpriteBatchNode一样的快...(在旧设备上大概慢了10%,在新设备上基本上察觉不出)
v2.2 和 v3.0 最大的区别在于:
Sprite对象可以有不同的纹理ID。
Sprite对象可以有不同种类的
Node作为子节点,包括
ParticleSystem。
Sprite对象可以有不同的混合函数和不同的着色器。
但是如果你这么做,
渲染器可能无法对它所有的子节点进行批处理(性能较低)。但是游戏仍然可以正常运行,不会触发任何断言。
总结:
保持将所有的精灵放在一张大的 spritesheet 中。
使用相同的混合函数(使用默认)
使用相同的着色器(使用默认)
不要将精灵添加到
SpriteBatchNode
只有当你需要一些额外的性能上提升(虽然很小),
SpriteBatchNode才会是你最后的选择(你需要对它的限制条件很熟悉)。
相关文章推荐
- cocos2d-x学习笔记-SpriteBatchNode的优化原理
- 我的Cocos2d-x学习笔记(八)利用CCSpriteBatchNode进行优化
- 我的Cocos2d-x学习笔记(八)利用CCSpriteBatchNode进行优化
- Cocos2d-X 学习笔记 20 利用CCSpriteBatchNode提高渲染效率
- cocos2d学习笔记(六)CCParallaxNode和Tile Map
- cocos2d-x 3.1.1 学习笔记[18] Sprite创建之旅
- 14.2Cocos2d-x 中的粒子系统(笔记);14.2.1 ParticleBatchNode;
- cocos2d-x3.1.1 step by step 学习笔记6 Sprite精灵类
- cocos2d-x 常用代码、高频使用代码【CCLayer、CCEditBox编辑框、CCControlButton按钮、CCLabelTTF标签、CCSpriteBatchNode渲染、CCMen】
- Cocos2d-x学习笔记(三)CCNode分析
- cocos2d-x 3.6版本学习笔记-内存管理之Node对象
- cocos2d-x学习笔记(16)--spritesheet(精灵表单)
- cocos2d理解--SpriteBatchNode和TextureAtlas
- cocos2d-x 3.1.1 学习笔记[2]Sprite 精灵
- Cocos2d-x SpriteBatchNode
- cocos2d学习笔记(六)CCParallaxNode和Tile Map
- cocos2d-X 节点(SpriteBatchNode.h.)API
- cocos2d-x学习笔记(2)--向游戏中添加角色(sprite)
- Cocos2d-js_____Sprite 和 SpriteBatchNode
- cocos2d-x 3.1.1 学习笔记[19] ClippingNode 可以镂空别的精灵