2

我正在使用 Texture2D 对象作为图块表。它是一维的——一格高,但有多长。

我只是好奇是否有任何缺点(除了更难以编辑,我猜)让它们像这样布置而不是更紧凑的方式,例如,而不是 64x1 瓷砖,使其成为 16x16。改变它不会很难,但我想如果长图像没有伤害的话,为什么还要麻烦呢!

4

2 回答 2

1

拥有较长的图像可以更容易地在工作表中“索引”精灵。例如,在您的情况下,索引处的图像i位于坐标处(w * i, 0),其中w是一个精灵的宽度。将它放在正方形中意味着您需要更复杂的数学来找到正确的精灵。它会在(w * (i % 16), h * (i / 16)). (顺便说一下,这些坐标以像素为单位。)

所以使用长图!它会让你的代码更干净。

于 2012-10-02T00:38:57.577 回答
1

唯一真正的缺点是您将使用较少的精灵达到纹理的最大宽度(Reach轮廓上为 2048,上为 4096 HiDef)。

这不是一个真正的问题,因为当它发生时,添加对更多行的支持是如此微不足道。


看到您提出的问题,有一件晦涩的、与性能相关的事情至少需要注意,即使您几乎不需要担心它。

纹理的像素数据以逐行的顺序存储在 CPU 内存中。因此,如果您的图块水平存储,您尝试读取或写入单个图块的像素(即:GetDataSetData),您将访问许多小的、分散的内存部分。如果您垂直存储切片,则每个切片将占用一大块内存 - 这具有更好的缓存一致性,并且可以用更少的操作进行复制(即:它更快)。

这在 GPU 上不是问题,在 GPU 上,纹理存储在布局中,这样所有附近的像素(不仅仅是左右的像素)都存储在附近的内存中。

于 2012-10-02T06:46:17.127 回答