我为这个冗长的问题预先道歉,有多个子问题,但问题确实如标题中所述。接下来是对问题不同方面的详细分解。
在我使用 cocos2d 构建的通用 ios 游戏中,我有四类图像 - 我想确定哪些应该进入 spritesheets,哪些最好作为单独的图像加载。我目前的猜测是,只有在整个游戏中运行的角色动画才能提供作为 spritesheets 加载到内存中的值:
- 在整个游戏过程中运行的角色动画(用户在菜单中时除外):对于这些,我假设将图像放在 spritesheet 中将减少运行时内存使用量(由于单个文件的填充到两个字节边界的幂),因此它们是精灵表的候选者。那是对的吗?
- 小图像(大约 200 个),其中 0 到 4 个在游戏过程中随时显示,随机选取。对于这些,我不确定是否值得将所有 200 张图像加载到内存中,而一次最多只能使用 4 张。因此,直接将它们作为图像访问可能会更好。那是对的吗?
- 一些(大约 20 个)小的菜单元素,例如仅在静态菜单中使用的按钮:由于菜单项仅在菜单显示期间使用,我认为它们在通过 spritesheets 改善内存访问方面没有太大价值。那是对的吗?
- 一些用作菜单背景、游戏场景等的大图像。这些图像大多数与屏幕分辨率一样大。由于屏幕分辨率大致等于单个图像的最大尺寸(例如,对于 ipad Retina,图像尺寸为 4096 x 4096 与屏幕尺寸为 2048 x 1536),使用 spritesheets 最多没有太多增益 1或 2 个大图像将适合一个精灵表。此外,由于这些大文件中的每一个都只在一个场景中使用,因此将所有这些大图像作为 spritesheets 预先加载到内存中似乎是一种不必要的开销。因此,直接将它们作为 spritesheets 访问。那是对的吗?
几个常见的相关问题:
a) 将不同场景中使用的图像打包到同一个 spritesheet 中,即使在该场景中只使用了图像的一个子集,我们也可以将它们加载到内存中。我认为这是一个坏主意。正确的?
b) 仅在较旧的设备(iPad 1 和 iPhone 3gs)上玩游戏时会出现口吃。spritesheets 会帮助减少这种卡顿吗?
c) 我假设 spritesheets 只会有利于运行时内存占用,而不是应用存档的磁盘大小。例如,我注意到一组大小为 11.8 MB 的文件在放入 spritesheet 时为 11 Mb - 压缩优势不大。这是一个有效的假设吗?
请让我知道您对上述理由的看法。
谢谢
阿南德