在Cocos2d中,我将播放一个动画。动画大约有12帧,每帧都相当大。事实上,每个帧的-hd版本都是相当大的。
无论如何,首先,我使用Zwoptex将所有12帧放在一个纹理中创建了它。纹理约为2048x2048。
这样我就可以用这个纹理在CCSprite中动画化一个CCSpriteBatchNode了。
但我好像收到了二级记忆警告。
现在我想到了,我不认为CCSpriteBatchNode应该被用于一个雪碧。我想只有当你想画很多使用相同纹理的精灵时,它才会有用。
所以我想知道:我是否应该一帧一帧地动画精灵(没有巨大的纹理)?或者可以用那种巨大的纹理,但以不同的方式使用?
发布于 2011-09-27 07:09:00
关于CCSpriteBatchNode,你是对的。CCSpriteBatchNode就像一个批处理节点:如果它包含子节点,它将在一个单独的OpenGL调用(通常称为“批绘制”)中绘制它们,如果没有CCSpriteBatchNode (在本例中),所有的“批绘制”都将被调用的次数与子级数(sprites)一样多。
CCSpriteBatchNode可以引用一个和唯一一个纹理(一个图像文件,一个纹理地图集),即由zwoptex创建的雪碧片。只有包含在该纹理中的CCSprites才能添加到CCSpriteBatchNode中。添加到CCSprites中的所有CCSpriteBatchNode都是在一个OpenGL ES抽签调用中绘制的。如果没有将CCSprites添加到CCSpriteBatchNode中,则将需要对每个CCSpriteBatchNode进行OpenGL ES抽签调用,这是效率较低的。
根据您的场景,您不必使用CCSpriteBatchNode,因为在任何给定的时间只有一个纹理呈现。
,所以我想知道:我是否应该一帧一帧地动画精灵(没有巨大的纹理)?或者可以用那种巨大的纹理,但以不同的方式使用?
无所谓。无论如何,您将加载2048x2048纹理。要思考的问题是,为什么只有一个2048x2048纹理给你一个二级警告?你要加载多少这样的纹理。顺便说一下,上面的iPod3G/iPhone3GS只支持2048x2048(这很好)。
如果您正在加载许多纹理(这在我看来是正确的)。您需要编程一些逻辑,您可以卸载纹理时,他们是不必要的。请查看以下方法:
[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFramesFromFile:fileName];
[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];
[[CCTextureCache sharedTextureCache] removeUnusedTextures];就动画而言,您可以创建CCAnimation并使用它,或者(取决于您的场景)您可以使用setDisplayFrame(CCSpriteFrame框架);
https://stackoverflow.com/questions/7549266
复制相似问题