我正在为RTS游戏开发等距2D瓷砖。我有两种方法可以画地板。一个选项是一个大图像(例如8000px x 8000px大约有10MB),第二个选项是只在可见区域逐块绘制图像。
我的问题是什么(对表演)更好?
从性能和内存角度来看,平铺方法更好。
内存方面:如果你可以使用一个精灵表来保存你需要渲染的每个瓷砖的纹理,那么使用的内存量就会大大减少,而不是为你想要渲染多次的瓷砖重新定义纹理。此外,在每个纹理上都有一个名为"pitch"的属性。这个属性告诉我们使用的内存比图像实际需要的内存多。什么为什么我的程序会这样做?回到过去,当本·克诺比还被称为欧比-万·克诺比时,纹理占据了它们应该占据的内存。但现在,随着硬件加速,GPU为纹理添加了一些填充,使其与边界对齐,从而可以更快地处理。这是可以通过使用精灵表来减少的内存。
从性能的角度来看:无论何时在屏幕上绘制常规精灵,图形硬件都需要三个主要信息:1)要从中渲染的纹理。2) 要从该纹理的哪个部分进行渲染。3) 在屏幕上要渲染到的位置。对每个要渲染的对象重复此操作。对于spritesheet,它只传递一次数据,这大大提高了性能,因为从CPU向GPU传递数据(反之亦然)非常慢。
事实上,我不同意这两种评论。当你的程序成熟时,改变这种能力是很困难的。