【问题标题】:When to use CCSpriteBatchNode?何时使用 CCSpriteBatchNode?
【发布时间】:2011-11-24 20:14:24
【问题描述】:

在 Cocos2d 中我将播放动画。动画大约有12帧,每一帧都比较大。其实每一帧的-hd版本还是蛮大的。

无论如何,首先,我通过使用 Zwoptex 将所有 12 帧放入纹理中来创建它。纹理约为 2048x2048。

这样我就可以使用该纹理为 CCSpriteBatchNode 中的 CCSprite 设置动画。

但我似乎收到了 2 级内存警告。

现在我想起来了,我认为 CCSpriteBatchNode 不应该用于 one 精灵。我想它只有在你想绘制大量使用相同纹理的精灵时才有用。

所以我想知道:我应该逐帧动画精灵吗(没有巨大的纹理)?或者是否有可能以不同的方式使用这种巨大的纹理?

【问题讨论】:

    标签: objective-c cocos2d-iphone


    【解决方案1】:

    关于 CCSpriteBatchNode,你是对的。 CCSpriteBatchNode 就像一个批处理节点:如果它包含子节点,它将在 1 个单独的 OpenGL 调用中绘制它们(通常称为“批量绘制”),如果没有 CCSpriteBatchNode(在这种情况下),所有“批量绘制”将被称为多次作为孩子(精灵)的数量。

    CCSpriteBatchNode 可以引用一个且仅一个纹理(一个图像文件,一个纹理图集),即由 zwoptex 创建的精灵表。只有包含在该纹理中的 CCSprite 才能添加到 CCSpriteBatchNode。添加到 CCSpriteBatchNode 的所有 CCSprite 都在一个 OpenGL ES 绘制调用中绘制。如果 CCSprite 未添加到 CCSpriteBatchNode 中,则每个都需要 OpenGL ES 绘制调用,效率较低。

    根据您的场景,您不必使用 CCSpriteBatchNode,因为在任何给定时间只渲染一个纹理。

    所以我想知道:我应该逐帧动画精灵吗(没有巨大的纹理)?还是可以以不同的方式使用这种巨大的纹理?

    没关系。无论如何,您将加载 2048 x 2048 纹理。需要思考的问题是,为什么只有一个 2048 x 2048 纹理会给您 2 级警告?你加载了多少这样的纹理。 BTW 2048 x 2048 只支持上面的 iPod3G/iPhone3GS(没问题)。

    如果您正在加载许多纹理(这对我来说似乎是正确的)。您需要编写一些逻辑,以便在不需要时卸载纹理。 请查看以下方法:

    [[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFramesFromFile:fileName];
    [[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];
    [[CCTextureCache sharedTextureCache] removeUnusedTextures];
    

    就动画而言,您可以创建 CCAnimation 并使用它,或者(取决于您的场景)您可以使用 setDisplayFrame(CCSpriteFrame frame);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-12
      相关资源
      最近更新 更多