Vol*_*ort 13 objective-c cocos2d-iphone
在Cocos2d我会播放动画.动画大约有12帧,每帧都相当大.事实上,每帧的-hd版本都非常庞大.
无论如何,首先,我使用Zwoptex将所有12帧放入纹理中来创建它.纹理约为2048x2048.
这样我就可以使用该纹理在CCSpriteBatchNode中设置CCSprite的动画.
但我似乎得到了2级记忆警告.
现在我想到了它,我不认为CCSpriteBatchNode应该用于一个精灵.我想这只是想要绘制大量使用相同纹理的精灵才有用.
所以我想知道:我应该逐帧动画精灵(没有巨大的纹理)吗?或者是否可以以不同的方式使用那种巨大的纹理?
Asy*_*ote 24
你是对的CCSpriteBatchNode.CCSpriteBatchNode就像一个批处理节点:如果它包含子节点,它将在单个OpenGL调用中绘制它们(通常称为"批量绘制"),如果没有CCSpriteBatchNode(在这种情况下),所有"批量绘制"将被调用为很多时候,孩子的数量(精灵).
CCSpriteBatchNode可以引用一个且仅一个纹理(一个图像文件,一个纹理图集),即zwoptex创建的sprite表.只有该纹理中包含的CCSprit可以添加到CCSpriteBatchNode中.添加到CCSpriteBatchNode的所有CCSprit都在一个OpenGL ES绘制调用中绘制.如果未将CCSprit添加到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];
Run Code Online (Sandbox Code Playgroud)
就动画而言,你可以创建CCAnimation并使用它或(根据你的场景)你可以使用setDisplayFrame(CCSpriteFrame frame);
归档时间: |
|
查看次数: |
6268 次 |
最近记录: |