【问题标题】:CCSpriteBatchNode: Does the Child of Child receive drawing performance gains?CCSpriteBatchNode:Child of Child 是否获得绘图性能提升?
【发布时间】:2012-11-12 08:02:18
【问题描述】:

我有一个CCSpriteBatchNode,其配置如下:

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

所有孩子(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 通过将其所有子 CCSprites 一起绘制来优化 CCSpriteBatchNode 中所有子的绘制。这是否也适用于CCSprites 的孩子?

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

【问题讨论】:

  • AFAIK,是的。如果您使用 cocos2.0 或更高版本,请检查绘制图形的数量,添加一些子元素,它不应该增加:即批处理节点消耗每个添加的纹理(而不是“添加的每个精灵”)的单个绘制调用。不知道您是否在 ARC'ing,但如果不是,您可能会泄漏 childA1 所写的内容(该构造函数不会返回自动释放的对象)。
  • 我同意 YvesLeBrog 的观点。如果您谈论 Cocos2d 的纹理内存,它会按图像或纹理加载。一旦纹理加载到内存中,再次加载它既不需要内存也不需要时间,从而提高了游戏的性能。关于变量消耗的内存,我认为这不是理想的方式,因为 CCSprite 实例在其类本身中是自动释放的。所以我们不必担心它们的内存消耗。

标签: iphone objective-c ios cocos2d-iphone


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-02-05
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 2012-03-19
    • 2014-09-06
    • 2013-11-22
    • 2012-12-04
    • 1970-01-01
    相关资源
    最近更新 更多