gpt4 book ai didi

objective-c - 什么时候使用 CCSpriteBatchNode?

转载 作者:太空狗 更新时间:2023-10-30 03:20:10 27 4
gpt4 key购买 nike

在 Cocos2d 中我将播放一个动画。动画大概有12帧,每一帧都比较大。事实上,每一帧的-hd版本都相当庞大。

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

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

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

现在我想起来了,我认为 CCSpriteBatchNode 不应该用于一个 Sprite 。我猜它只有在您想绘制大量使用相同纹理的 Sprite 时才有用。

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

最佳答案

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

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

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

So I want to know: Should I animate the sprite frame by frame (no huge texture)? Or is it possible to use that huge texture but in a different way?

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

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

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

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

关于objective-c - 什么时候使用 CCSpriteBatchNode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7549266/

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