CCSpriteBatchNode:Child of Child是否获得了绘图性能提升?

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通过仅操纵该组精灵的父级来操纵一组.

ddt*_*ddt 2

简短的回答是,是的,CCSpriteBatchNode将为所有子节点(包括所有间接后代)进行一次绘制调用。

然而,这是否比使用常规效果更好CCSprites取决于您修改精灵的频率。当您使用 a 时CCSpriteBatchNode,每次修改精灵时,都需要使用 CPU 而不是 GPU 重新计算该精灵及其所有子级的纹理图集四坐标。对于您的示例,如果移动 的位置,则在渲染下一帧之前将重新计算toChildA1的坐标。在大多数应用程序中,openGL 绘制调用的减少会增加额外计算的成本,因为绘制调用相对昂贵,但最终这将取决于您的应用程序及其使用精灵的方式 - 因此我建议对如果这是您的应用程序的性能瓶颈。ChildB1ChildB999