【问题标题】:Get Isometric Tile Under Mouse在鼠标下获取等距平铺
【发布时间】:2014-11-20 06:17:08
【问题描述】:

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

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

附:我尝试了无数不同的方程式,其中许多与我上面的方程式具有完全相同的结果

【问题讨论】:

    标签: java mouse iso tile isometric


    【解决方案1】:

    重构你的变量名。

    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;
    

    这可能看起来有些过分,但在我看来更容易阅读和推理。根据this tutorial如果你尝试推导你会得到的逆方程:

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

    这不考虑相机偏移。

    【讨论】:

    • 我实际上已经尝试过该教程(尽管我使用了该教程的代码更精简的版本)。它产生了相同的结果,知道为什么吗?
    • 所以基本上,通过使用你刚刚发给我的教程,并使用他完成的代码,结果看起来像gyazo.com/1387cfe7472b816f6009292e8f0df4c3
    • 是否总是在 x(瓦片)轴上偏离一个瓦片?还有什么问题吗?
    • 在那张图片中,如果我将鼠标移过鼠标所在的瓷砖的中心点,那么它会移动到正确的瓷砖上。所以是的。我试过偏移它,这样它就不是瓷砖的中心,而是瓷砖的边缘。并且有些工作,除了它只有在我的鼠标位于所述瓷砖边缘的中心时才能完美工作,如果你明白我在说什么。基本上它就像每个图块的边界框是一个矩形,而不是菱形
    猜你喜欢
    • 2022-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 2012-12-20
    • 2014-09-05
    相关资源
    最近更新 更多