好的,所以我有我的等距地图,其中每个瓷砖的宽度为 64,高度为 32。这是我想出的放置瓷砖的方程式
xPos = (this.getPos().getX() - this.getPos().getY()) * (64 / 2) - Main.gameWindow.getCamera().getxOffset().intValue();
xPos -= 32;
yPos = (this.getPos().getX() + this.getPos().getY()) * (32 / 2) - Main.gameWindow.getCamera().getyOffset().intValue();
我将 xPos 减去 32 以弥补磁贴的原点在最左角的事实。
我一直在尝试做的是找到鼠标下方的磁贴。所以首先我尝试简单地反转等式(我确信它会起作用)这是我反转它时最终得到的代码。
int yMouseTile = ( (cursorY / (32 / 2) - (cursorX / 32)) / 2 );
int xMouseTile = ( (cursorX / 32) + yMouseTile);
这只能奏效。但事实证明,此代码实际上将每个瓷砖视为正方形,而不是菱形。
下一个奇怪的部分是,当我的鼠标经过瓷砖的中心时,瓷砖会发生变化。所以应该发生的是,我的鼠标应该越过磁贴的边缘,然后它变成下一个。但相反,它的作用就好像瓷砖的中心实际上是边缘。
但实际上,我想要的只是使我的鼠标像这样工作的方程式http://www.tonypa.pri.ee/tbw/tut18.html
在该链接上,单击"单击此处开始"按钮,然后观察鼠标如何与磁贴交互。这是我的目标:),谢谢
附言我尝试了无数不同的方程,其中许多方程的结果与我上面的方程完全相同
重构变量名称。
int TILE_WIDTH = 64;
int TILE_HEIGHT = TILE_WIDTH / 2;
int xMap = this.getPos().getX();
int yMap = this.getPos().getY();
int xScreenCameraOffset = Main.gameWindow.getCamera().getxOffset().intValue();
int yScreenCameraOffset = Main.gameWindow.getCamera().getyOffset().intValue();
xScreen = (xMap - yMap) * (TILE_WIDTH / 2) - yScreenCameraOffset;
yScreen = (xMap + yMap) * (TILE_HEIGHT / 2) - yScreenCameraOffset;
这可能看起来有些过分,但在我看来更容易阅读和推理。根据本教程,如果您尝试推导出反向方程,您将获得:
xMouseTile = (xCursor / TILE_WIDTH / 2 + yCursor / TILE_HEIGHT / 2) / 2;
yMouseTile = (yCursor / TILE_HEIGHT / 2 - xCursor / TILE_WIDTH / 2) / 2;
这不会考虑相机偏移。