在鼠标下获取等距瓷砖

时间:2014-11-20 06:17:08

标签: java mouse iso tile isometric

好的,所以我有我的等轴测图,每个瓷砖的宽度为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

在该链接上,单击“单击此处开始”按钮,然后观察鼠标如何与切片进行交互。这是我的目标:),谢谢

P.S。我尝试了无数不同的方程式,其中许多方程式与上面的公式完全相同

1 个答案:

答案 0 :(得分:0)

重构你的变量名。

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;

这可能看起来过分,但在我看来更容易阅读和推理。根据{{​​3}}如果你试图推导出反向等式,你会得到:

xMouseTile = (xCursor / TILE_WIDTH  / 2 + yCursor / TILE_HEIGHT / 2) / 2;
yMouseTile = (yCursor / TILE_HEIGHT / 2 - xCursor / TILE_WIDTH  / 2) / 2;

这并未考虑相机偏移。