【问题标题】:LibGDX How to get mouse coordinates in the world?LibGDX 如何获取鼠标在世界上的坐标?
【发布时间】:2022-06-10 19:05:25
【问题描述】:

我一直在寻找答案很长时间,但我找不到它。 我用:

public Vector2 getWorldPositionFromScreen(Vector3 v){
    Vector3 vc = orthographicCamera.unproject(v);
    return new Vector2(vc.x, vc.y);
}

但是问题是y坐标被翻转了,我不知道怎么翻转回来。我尝试了以下方法,但都没有奏效:

public Vector2 getWorldPositionFromScreen(Vector3 v){
    int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;
    Vector3 vc = orthographicCamera.unproject(new Vector3(v.x, screenHeight - v.y, v.z));
    return new Vector2(vc.x, vc.y);
}

我尝试调试并意识到 Gdx.input.getX() 和 ...getY() 返回相对于窗口的坐标,而不是屏幕 但是除了垂直反转之外,camera.unproject 还可以解决这个问题。但我发现反转来自 Gdx.input.getY()

【问题讨论】:

  • LibGdx 使用 Y-up 坐标系。所以你在图像中标记的零点不在左上角,而是在左下角,Y轴向上方向增加。使用这个坐标系比翻转 y 坐标更容易,因为它在 libgdx 中的任何地方都使用。
  • @Tobias 我每次更新都显示值“Gdx.input.getY()”并看到了这个结果

标签: java libgdx


【解决方案1】:

我不知道为什么,但它奏效了。我正在使用的代码:

@Override
public void render(){
    
    Vector3 mouseAtScreen = new Vector3(Gdx.input.getX(),  Gdx.input.getY(), 0);
    Vector2 mouseAtWorld = getWorldPositionFromScreen(mouseAtScreen);
    spriteBatch.draw(cursorPointTexture, mouseAtWorld.x, mouseAtWorld.y, 5, 5);
}
public Vector2 getWorldPositionFromScreen(Vector3 v){
    Vector3 vc = orthographicCamera.unproject(new Vector3(v.x,   v.y, v.z));
    return new Vector2(vc.x, vc.y); 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 2020-06-28
    • 2016-02-29
    相关资源
    最近更新 更多