图片与字体
哪些图片能加载、多大的尺寸合适,以及为什么内置形状几乎总是比图片更好
要点
- 能用形状就用形状
- 图片的上限:移动端关卡为2048,其他情况为4096
- 图片尺寸大致与它在屏幕上的尺寸相同。向上取整到下一个2的幂
格式与尺寸
引擎能从文件字节中解码的格式都能加载。实际上就是png和jpg
游戏不限制文件,限制来自硬件:
| 设备 | 最长边 |
|---|---|
| Android,保证支持 | 4096 |
| Android,通常 | 8192到16384 |
| 桌面PC | 最多32768 |
内存
真正的限制是内存。无论文件多大,图片在内存中都以原始像素存储。png每个像素占4字节。jpg占3字节,因为它没有透明通道
| 尺寸 | 内存(png) |
|---|---|
| 512×512 | 1MB |
| 1024×1024 | 4MB |
| 2048×2048 | 16MB |
| 4096×4096 | 64MB |
| 8192×8192 | 256MB |
一张8192的纹理,单张图片就要占四分之一GB。在手机上这不是变慢,而是崩溃
由玩家决定的部分
每个玩家的图形设置中有三项决定图片占用多少内存:
- 加载时是否压缩图片。压缩会把上面的数字除以4到8
- 图片在内存中允许的最长边。边长减半,内存变为四分之一
- 是否生成Mipmap,也就是用于小尺寸绘制的缩小副本
手机默认压缩图片,并限制在2048。桌面端保留完整图片,并限制在4096
你需要做的只是图片上的一个字段:它是哪种图片。这个字段位于资源列表中图片的旁边。照片最能承受缩放和压缩。边缘锐利的绘图承受得较差
像素画从不压缩、从不生成Mipmap、从不平滑,无论设备倾向于怎样处理
Mipmap
Mipmap可以防止小图片闪烁。它们是缩小的副本,图片在屏幕上显示得很小时,会代替完整图片绘制。它们会多占用三分之一的内存
没有Mipmap时,缩小的图片不会变平滑,而是会出现爬动的纹路。玩家可以关闭Mipmap,而像素画永远不会有Mipmap
一张在屏幕上只占200像素的4096图片,占用的内存是预先缩小到256的同一张图片的256倍
形状优先于图片
形状在各方面都比图片便宜:没有文件,不占内存,没有版权问题。内置形状是真正的几何体,而不是贴在矩形上的图片。它们没有会被绘制然后丢弃的透明边缘
这在手机上很重要。在中端移动芯片上,一个有1000个物体的场景会把95%到97%的GPU时间花在像素着色上。一个形状只覆盖自身矩形的29.4%。带纹理的四边形其余部分都是透明的浪费
真正需要一张画面时才需要图片:标志、照片、手绘作品。几何图形请使用形状。如果没有需要的形状,就在形状编辑器中画出来
字体
字体可以加载ttf、otf、ttc格式。没有自带字体时,文本会用系统中现有的字体绘制,而不同设备上的字体各不相同
字体缓存是预先准备好用于绘制的字符集合。一个生成器会根据关卡中包含的文本重新构建它。等文本不再变化后再运行这个生成器