1

我有一个tileset(一个充满其他小图像的图像)。我想得到一张叫做瓷砖的小图像,这样我就可以用它做点什么了。我知道每个图块的大小(它们的大小都相同)。我有两个方程:

x = (i % tiles_hor) * tile_h
y = (i % tiles_ver) * tile_w

x = (i % tiles_hor) * tile_w
y =  (i / tiles_hor) * tile_w

其中i表示我想要获取的图块的索引;
tiles_hor是水平的瓦片数;
tiles_ver是垂直的瓦片数;
tile_wtile_h分别是tileset内每个tile的宽度和高度;

瓦片按顺序接收它们的索引,如下所示:

01 02 03 04 05 
06 07 08 09 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

所以每一对数字都是tileset中一个tile的索引。假设我想要获得 04 的瓷砖(假设瓷砖的每个尺寸为 32x32):使用第一个等式:

x = (4 % 5) * 32 = 128。所以它在图像内的x位置是128
y = (4 % 5) * 32 = 0。所以它在图像内的y是0;

使用第二个等式:
x = (4 % 5) * 32 = 128。所以它在图像中的 x 位置是 128
y = (4 / 5) * 32 = 0。这里是 0,因为我们首先四舍五入第一个最接近的次要号码的表达(我不知道我的表达是否正确。如果不是,请纠正我)。

请注意,我们正在考虑一个完美的方形图块集(在本例中为 5x5)

我的问题是:
第二个适用于大多数情况。当没有完美的正方形tileset并且高度很高时,第一个停止工作。那么我在那里做错了什么?

此外,释放一个非常重要的值(tiles_ver 和 tile_h)的方程怎么可能是正确的?我在那里想念什么?

4

1 回答 1

1
x = ((i - 1) % tiles_hor) * tile_w
y = ((i - 1) / tiles_hor) * tile_h
于 2012-07-28T04:07:51.833 回答