Cocos2d - 我可以将多个精灵帧加载到帧缓存中

时间:2012-10-19 19:09:39

标签: iphone objective-c ios cocos2d-iphone sprite-sheet

在Cocos2d v0.99中有一个名为CCSpriteFrameCache的类。我可以加载所有的精灵帧

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"images.plist"];

然后我可以使用那些加载的帧

CCSprite *sprite=[CCSprite spriteWithSpriteFrameName:@"img01.png"];

现在我的问题是:我们是否创建了一个大的精灵表,它将保存我们将用于动画的每一个图像?我的意思是,我以为我会为不同的动画对象准备几张精灵表。如果这个问题的答案为NO,那么我以不同的方式加载每个精灵,那么我的第二个问题是如何引用特定精灵表中的一个帧?

2 个答案:

答案 0 :(得分:4)

  

现在我的问题是:我们是否创建了一个大的精灵表来保存我们将用于制作动画的每一张图片?

是的,或者如果您有许多不同的帧图像,则可以有多个精灵表...

  

我的意思是,我以为我会为不同的动画对象提供几张精灵表。

这取决于生成的精灵表的大小。原则上可以方便地在同一张纸中组织相同动画的不同帧,但如果您的帧占用,例如600x600,您的精灵表将占用与1024x1024纸张相同的内存,因此您最好添加更多框架到同一张纸,即使它与不同的动画相似。一般情况下,您可以使用纸张尺寸,只要两个尺寸都是2的幂,就不会对内存占用效率低下,如果对您有意义,可以将框架组织成不同的纸张。

  

如果这个问题的答案为NO,那么我以不同的方式加载每个精灵,那么我的第二个问题是如何引用特定精灵表中的一个帧?

由原始文件名组成的精灵表......

希望它有所帮助...

答案 1 :(得分:3)

如果可能的话,将尽可能多的图像塞入尽可能少的纹理图集中。决定因素通常是z排序。如果你有两个地图集和两个精灵批处理节点,那么每个精灵批处理节点只能按z顺序渲染它们的精灵,而另一个批处理节点中的精灵总是在前面或后面。

您不需要知道精灵帧来自哪个纹理图集(精灵表)。只需按名称引用它。如果你需要知道框架引用的纹理,请检查sprite框架的纹理属性,并将其与sprite批处理节点的纹理属性进行比较。