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