1

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

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

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

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

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

4

2 回答 2

4

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

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

我的意思是,我想我会有几个用于不同动画对象的精灵表。

这取决于生成的精灵表的大小。原则上在同一张sheet中组织同一个动画的不同帧比较方便,但是如果你的帧占用,比如600x600,你的sprite sheet会和1024x1024的sheet占用相同的内存,所以最好多加一些帧到同一张纸,即使它属于不同的动画。通常,您可以使用图纸尺寸,只要两个尺寸都是 2 的幂,您就不会在内存占用方面效率低下,如果这对您有意义,您可以将框架组织成不同的图纸。

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

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

希望能帮助到你...

于 2012-10-19T19:23:07.900 回答
3

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

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

于 2012-10-19T19:53:19.697 回答