【发布时间】:2012-10-31 00:16:43
【问题描述】:
所以我的问题是,通常当我生成地图时,我会使用以下内容:
for(int x = 0; x < width; x++) {
for(int y = 0; y < height; y++) {
tiles.add(new Tile(x, y));
}
}
您可以做到这一点。 无论如何,我需要以实用的方式在等距/45 度旋转中做到这一点。
说出你要添加的第一个循环 new Tile(width / 2, 0)。
下一个循环,您将添加 new Tile((width / 2) - 1, 0) 和 new Tile((width / 2) + 1, 0)。
我尝试了几种不同的方法来做到这一点,但都没有取得太大的成功。
【问题讨论】:
-
按照您习惯的方式保持表示方式,并以等距方式(即旋转 45 度)显示图块不是更容易吗?这样最上面的图块实际上在 (width-1, 0),下一行的两个在 (width-2, 0) 和 (width-1, 1) (假设逆时针旋转)?
-
@Thomas 虽然这可能是一种更简单的方法,但问题在于图块仅跟踪其 X 和 Y 位置,并存储在列表中。所以渲染时很难计算它们的偏移量。
-
哦,我明白了。出于某种原因,我假设您将使用二维数组作为网格,即使您的代码清楚地指示了一个列表。我的错。我在下面更新了我的答案以消除该假设 - 我认为我提出的总体思路仍然成立。
-
我已经更新了很多我原来的答案。我添加了一个段落,显示使用我建议的 (x,y) 坐标编码,实际上计算图块的渲染偏移非常容易。