我使用Texture2D对象作为tileheet。它是一维的 - 一个瓷砖高,然而很多瓷砖很长。
我只是好奇是否有任何不利(除了更难编辑,我猜),让它们像这样摆放而不是更紧凑的方式,例如而不是64x1瓷砖,使其16x16。改变它并不是很难,但我想如果有一个长图像没有伤害,为什么还要烦恼呢?
答案 0 :(得分:1)
拥有较长的图片可以让您更容易索引'表中的精灵。例如,在您的情况下,索引i
处的图像位于坐标(w * i, 0)
处,其中w
是一个精灵的宽度。将它放在正方形中意味着您需要更复杂的数学来找到正确的精灵。它将在(w * (i % 16), h * (i / 16))
。 (顺便说一句,这些坐标以像素为单位。)
所以使用长图像!它会让你的代码更清洁。
答案 1 :(得分:1)
唯一真正的缺点是,您将使用较少的精灵达到纹理的最大宽度(Reach
配置文件中的2048,HiDef
上的4096)。
这不是一个真正的问题,因为当它发生时,添加对更多行的支持是如此微不足道。
看到你提出这个问题,即使你几乎从不,也有一个一个模糊的,与性能相关的事情至少很有趣。需要担心它。
纹理的像素数据以逐行的顺序存储在CPU内存中。因此,如果您的图块是水平存储的,您可以尝试读取或写入单个图块的像素(即:GetData
和SetData
),您将访问许多小的,展开的内存部分。如果你垂直存储你的瓷砖,那么每个瓷砖将占用一大块内存 - 这具有更好的缓存一致性,并且可以用更少的操作复制(即:它更快)。
这是不 GPU上的一个问题,其中纹理存储的布局使得所有附近的像素(不仅仅是左边和右边的像素)都存储在内存附近。