3

我正在开发一个轴测图(等轴测图,但有角度视图)基于图块的游戏。

我的磁贴系统工作得很好,现在我正在处理输入问题。

瓷砖在视觉上与它们背后的逻辑(数组)不匹配(未对齐/偏移的菱形)。

在我使用“google-fu”找到的许多方法中,对输入应用转换(“旋转”)似乎是一种(代码量方面)易于实现且性能良好的方法。

问题是,对于我找到的所有来源,我无法真正掌握数字来自哪里,也无法掌握公式对它们的作用。

所以,我想解释一下“仿射变换”的数学公式(如果这是它的名字,因为我不确定......)


@Yochai_Timmer 对这个问题的回答是我想要使用的,但我不明白这些值的来源(主要是*),也不知道对它们做了什么。

[大部分*]:“28”是瓷砖宽度和全高的一半,“14”是半高,“56”是全宽......可能......但这几乎就是我从中得到的全部,无论正确与否,我还是被卡住了。


如果它可以帮助您给我一个更清晰的答案,我自己的图块是80 widthby 46 height,我正在使用相同的方法应用(渲染)它们(图块的右上角1x2y位于图块的中心1x1y,依此类推.. .)

此外,我使用的是 Java,API 是 Slick2D。因此,如果您知道任何有助于公式数学的隐藏函数/类(例如:Math.sen()、、Math.cos()...)或一般问题,也欢迎您指出它们,因为它可能对我有很大帮助。

4

1 回答 1

3

转换背后的关键思想是将瓦片视为经过线性转换的普通矩形。要理解这一点,假设您从一个普通的正方形开始,如下所示:

  +-----+
  |     |
  |     |
  +-----+

给定这个正方形,您可以想到两个向量,它们仅通过取正方形的两侧来定义“上”和“右”的含义:

  +-----+     ^
  |     |     |
  |     |     |
  +-----+     +----->

我们称这些向量为 i 和 j。您可以想象通过旋转和倾斜正方形将这个正方形变成菱形。如果你这样做,你可以想想这两个向量 i 和 j 会发生什么:

   /\          ^
  /  \        /
 /    \      /
 \    /      \
  \  /        \
   \/          >

注意 i 和 j 是如何旋转和缩放的。

确定一个点在投影下的正方形的数学背后的技巧是试图扭转这个过程。不是从正常的 i 和 j 向量开始并以倾斜/旋转的向量结束,而是从倾斜/旋转的 i 和 j 向量开始,然后尝试在变换下将世界转换回漂亮的方形网格。您执行的计算通过说“假设鼠标位于投影中的位置 (x, y),如果我们取消此转换,它将具有什么坐标 (x', y')?” 这背后的所有数学都是在两个坐标空间之间转换的标准线性代数。有关如何执行此操作的说明,请考虑阅读有关转换矩阵的 Wikipedia 文章,该文章描述了此过程的工作原理。

希望这可以帮助!

于 2012-06-21T21:32:40.497 回答