【问题标题】:Getting a top-left position of a tile inside a tileset获取瓦片集中瓦片的左上角位置
【发布时间】:2012-07-28 03:59:17
【问题描述】:

我有一个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 表示我要获取的 tile 的索引;
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)的方程怎么可能是正确的?我错过了什么?

【问题讨论】:

    标签: image algorithm tile


    【解决方案1】:
    x = ((i - 1) % tiles_hor) * tile_w
    y = ((i - 1) / tiles_hor) * tile_h
    

    【讨论】:

    • 如果不考虑tile_h,根本不考虑,就像在帖子中所做的那样。短期或长期能给我带来什么?
    • 如果 tile_w == tile_h,那么你可以只使用 tile_w。否则你需要同时考虑它们。
    • 其实 tile_w != tile_h。我想要一个不考虑 tile_h 会弄乱结果的例子。你能看到吗?
    • 当然,如果 tile_h 为 1 且 tile_w 为 32,并且如果您想计算 25 号瓷砖,那么您的任何方程式都不会起作用
    • 其实会的。原因 y = (25 / 32) * 32 = 0 * 32 = 0
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多