首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么时候使用CCSpriteBatchNode?

什么时候使用CCSpriteBatchNode?
EN

Stack Overflow用户
提问于 2011-09-25 23:15:01
回答 1查看 6.3K关注 0票数 13

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

无论如何,首先,我使用Zwoptex将所有12帧放在一个纹理中创建了它。纹理约为2048x2048。

这样我就可以用这个纹理在CCSprite中动画化一个CCSpriteBatchNode了。

但我好像收到了二级记忆警告。

现在我想到了,我不认为CCSpriteBatchNode应该被用于一个雪碧。我想只有当你想画很多使用相同纹理的精灵时,它才会有用。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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(这很好)。

如果您正在加载许多纹理(这在我看来是正确的)。您需要编程一些逻辑,您可以卸载纹理时,他们是不必要的。请查看以下方法:

代码语言:javascript
复制
[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFramesFromFile:fileName];
[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];
[[CCTextureCache sharedTextureCache] removeUnusedTextures];

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

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7549266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档