在cocos2d中,我将播放一个动画。动画大约有12帧,每帧都相当大。事实上,每帧的高清版本都相当大。
无论如何,首先,我使用zwoptex将所有12帧放到一个纹理中来创建它。纹理约为2048x2048。
这样我就可以使用该纹理在ccspritebatchnode中设置ccsprite动画。
但我似乎得到了2级记忆警告。
现在我想起来了,我不认为ccspritebatchnode应该用于一个sprite。我想只有当你想画很多使用相同纹理的精灵时它才有用。
所以我想知道:我应该一帧一帧地动画精灵(没有巨大的纹理)?或者用一种不同的方式使用这个巨大的纹理?

最佳答案

关于ccspritebatchnode,您是对的。
CCSpriteBatchNode就像一个批处理节点:如果它包含子节点,它将在1个单OpenGL调用(通常称为“批量绘制”)中绘制它们,在没有CCSRIPITBATCHON结(在这种情况下),所有的“批绘制”将被称为与子数(精灵)数量一样多的时间。
CcSpReTeButCn节点可以引用一个和唯一一个纹理(一个图像文件,一个纹理阿特拉斯),即ZWopTeX创建的SpRITE表。只有包含在该纹理中的ccsprites才能添加到ccspritebatchnode。添加到ccspritebatchnode的所有ccsprite都在一个opengl es draw调用中绘制。如果没有将ccsprites添加到ccspritebatchnode,则每个ccspritebatchnode都需要一个opengl es draw调用,效率较低。
根据你的场景,你不必使用CCSpriteBatchNode,因为在任何给定的时间只有一个纹理渲染。
所以我想知道:我应该一帧一帧地动画精灵(没有巨大的纹理)?或者用一种不同的方式使用这个巨大的纹理?
没关系。无论如何,您将加载2048x 2048纹理。要思考的问题是为什么只有一个2048×2048纹理给你一个2级警告?你正在加载多少这样的纹理。BTW 2048 x 2048仅在上述ipod3g/iphone3gs上受支持(这很好)。
如果你正在加载许多纹理(这对我来说似乎是真的)。您需要编程一些逻辑,以便在不需要时卸载纹理。
请注意以下方法:

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

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

10-08 05:32