Jon*_*ess 6 iphone objective-c cocos2d-iphone ios
我有一个CCSpriteBatchNode像这样的配置:
CCSpriteBatchNode
ChildA1
ChildB1
ChildB2
....
ChildB999
ChildA2
ChildA3
...
Run Code Online (Sandbox Code Playgroud)
所有孩子(ChildA1,ChildB1,ChildA2 ......)都是CCSprite对象.在CCSpriteBatchNode和所有的孩子,但ChildA1通过创建:
[CCSprite spriteWithSpriteFrameName:@"FileName.png"];
Run Code Online (Sandbox Code Playgroud)
ChildA1 像这样创建:
// Create Parent Sprite
CCSprite* childA1 = [[CCSprite alloc] init];
childA1.contentSize = CGSizeMake(37.5,37.5);
childA1.anchorPoint = ccp(0,0);
[batchNode addChild:childA1 z:0 tag:1];
// Add Child Sprites
[childA1 addChild:childB1 z:0 tag:1];
[childA1 addChild:childB2 z:0 tag:1];
[childA1 addChild:childB3 z:0 tag:1];
// Continue adding childB4-childB999
Run Code Online (Sandbox Code Playgroud)
注意:这渲染得很好,我看到了我期望的输出,childB1位置相对于childA1,移动childA1导致childB1移动.
我的问题是:我是否会在图纸中看到性能提升childB1- childB999?根据我的理解,通过将所有孩子聚集在一起,CCSpriteBatchNode优化所有孩子CCSpriteBatchNode的绘画CCSprites.这也适用于那些孩子CCSprites吗?
对于那些想要知道我为什么要这样做的人:这个游戏中有很多层,并且CCSprites在一个CCSprite内部的分组CCSpriteBatchNode允许我CCSprites通过仅操纵该组精灵的父级来操纵一组.
简短的回答是,是的,CCSpriteBatchNode将为所有子节点(包括所有间接后代)进行一次绘制调用。
然而,这是否比使用常规效果更好CCSprites取决于您修改精灵的频率。当您使用 a 时CCSpriteBatchNode,每次修改精灵时,都需要使用 CPU 而不是 GPU 重新计算该精灵及其所有子级的纹理图集四坐标。对于您的示例,如果移动 的位置,则在渲染下一帧之前将重新计算toChildA1的坐标。在大多数应用程序中,openGL 绘制调用的减少会增加额外计算的成本,因为绘制调用相对昂贵,但最终这将取决于您的应用程序及其使用精灵的方式 - 因此我建议对如果这是您的应用程序的性能瓶颈。ChildB1ChildB999
| 归档时间: |
|
| 查看次数: |
333 次 |
| 最近记录: |