3

我来自 2D 动画背景,所以当我使用动画序列时,我更喜欢使用图像序列。对我来说,这很有意义,因为您可以轻松地从合成/编辑软件中导出图像序列并轻松定义方面。

我是游戏开发的新手,对精灵表的使用感到好奇。有什么优点和缺点。文件大小有问题吗?- 对我来说,一堆小图像似乎与一个大图像相同。此外,定义精灵的每个单独区域似乎很麻烦。

基本上,我不明白您为什么要使用精灵表-请赐教。

谢谢

4

3 回答 3

6

精灵表的性能更好,因为您将所有数据都包含在单个纹理中。假设您有 1000 个精灵在精灵表中播放相同的动画。绘图的过程会像这样。

Set the sprite sheet texture.
Adjust UV's to show single frame of animation.
Draw sprite 0
Adjust UV's
Draw sprite 1
.
.
.
Adjust UV's
Draw sprite 998
Adjust UV's
Draw sprite 999

使用纹理序列可能会导致最坏的情况:

Set the animation texture.
Draw sprite 0
Set the new animation texture.
Draw sprite 1
.
.
.
Set the new animation texture.
Draw sprite 998
Set the new animation texture.
Draw sprite 999

呸!在绘制每个精灵之前,您必须将渲染状态设置为使用不同的纹理,这比调整几个 UV慢得多。

于 2010-08-19T02:01:24.897 回答
5

许多(大多数?)图形卡需要二次方的图像尺寸。因此,例如 128x128、512x512 等。然而,许多/大多数精灵不是这样的尺寸。然后你有两个选择:

  • 将精灵图像四舍五入到最接近的二次方平方。一个 16x32 的精灵在透明像素填充为 32x32 时会变大两倍。(这很浪费)
  • 将多个精灵打包到一个图像中。与其用透明度填充,不如用其他图像填充?尽可能高效地打包这些图像!然后只渲染图像的片段,这是完全有效的。

显然第二种选择要好得多,浪费的空间更少。因此,如果您必须将多个 sprite 打包到一张图像中,为什么不将它们全部打包成 sprite sheet 的形式呢?

总而言之,加载到显卡中的图像文件必须是二次方的平方。但是,程序可以选择将该纹理的任意矩形渲染到屏幕上;它不必是二次方或平方。因此,将纹理与多个图像打包在一起,以最有效地利用纹理空间。

于 2010-08-13T03:04:19.390 回答
3
  • 精灵表往往是较小的文件(因为整个文件只有 1 个标题。)
  • 精灵表加载更快,因为只有一个磁盘访问,而不是几个
  • 您可以轻松地一次查看或调整多个帧
  • 将全部内容加载到一个表面时减少浪费的视频内存(正如 Ricket 所说)
  • 单个精灵可以通过偏移来描绘(例如,在隐式网格上 - 无需显式标记或注意每个精灵的位置)

使用精灵表并没有很大的好处,但有几个小的好处。但这种做法可以追溯到大多数人使用适当的 2D 图形软件制作游戏图形之前的时间,因此艺术家工作流程不一定是当时最重要的事情。

于 2010-08-17T09:16:18.007 回答