gpt4 book ai didi

iphone - CCSpriteBatchNode : Does the Child of Child receive drawing performance gains?

转载 作者:可可西里 更新时间:2023-11-01 03:58:24 24 4
gpt4 key购买 nike

我有一个配置如下的 CCSpriteBatchNode:

CCSpriteBatchNode
ChildA1
ChildB1
ChildB2
....
ChildB999
ChildA2
ChildA3
...

所有 child (ChildA1、ChildB1、ChildA2...)都是 CCSprite 对象。 CCSpriteBatchNode 和除 ChildA1 之外的所有子节点都是通过以下方式创建的:

[CCSprite spriteWithSpriteFrameName:@"FileName.png"];

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

注意:这渲染得很好,我看到了我期望的输出,其中 childB1 的位置是相对于 childA1 的,并且移动 childA1 导致 childB1 移动。

我的问题是:我会在绘制 childB1-childB999 时看到性能提升吗?据我了解,CCSpriteBatchNode 优化了 CCSpriteBatchNode 中所有子节点的绘制,方法是将其所有子节点 CCSprites 绘制在一起。这是否也适用于那些 CCSprites 的子级?

对于那些想知道我为什么这样做的人:这个游戏中有很多层,将 CCSprites 分组到 CCSpriteBatchNode 中的 CCSprite 允许我操作一组 CCSprites 通过只操纵那组 Sprite 的父级。

最佳答案

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

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

关于iphone - CCSpriteBatchNode : Does the Child of Child receive drawing performance gains?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13340108/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com