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

Posted

技术标签:

【中文标题】Cocos2d - 我可以将多个精灵帧加载到帧缓存中吗【英文标题】:Cocos2d - Can I load multiple sprite frames into frame cache 【发布时间】:2012-10-10 11:00:35 【问题描述】:

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

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

我的意思是,我想我应该为不同的动画对象创建几个精灵表。

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

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

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

希望对你有帮助……

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于Cocos2d - 我可以将多个精灵帧加载到帧缓存中吗的主要内容,如果未能解决你的问题,请参考以下文章

如何使用多个精灵表? cocos2d/iPhone

SpriteFrameCache 精灵帧缓存

Sprite 帧动画 Cocos2d 3.0

Simple2D-25 精灵动作

将整数纹理附加到帧缓冲区

将OpenGL帧缓冲区对象与Qt(QOpenGLWidget)一起使用,绘制到帧缓冲区时如何禁用多重采样