我确信这很简单。我正在大脑冻结。我一直在颠倒它,减去它,乘以它,加上它。无论向下和向下是什么上升。
if (Gdx.input.isButtonPressed(Buttons.LEFT)) s.drawCirc(c, Gdx.input.getX(), Gdx.input.getY(), 100, 100);
x轴很好,罪魁祸首是Gdx.input.getY()
。当我向上移动手指时,它会上下移动。
我的圈子在中间排成一排,但是当我上升时,它会下降,当我下降时,它会上升。我想了解这里究竟发生了什么,以及为什么会发生这种情况。(当然还有如何修复它)
如果你需要知道c
是我的相机,这是代码以防这是罪魁祸首
c = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
并在我使用的drawCirc
方法中
shapeRenderer.setProjectionMatrix(c.combined);
答案 0 :(得分:2)
这是因为用于输入的坐标系和摄像机使用的坐标系在y轴上彼此相反。理想情况下,在获取输入时,您希望将输入取消投影到摄像机,以便所有坐标都很好地对齐。您可以使用c.unproject(input)
执行此操作。这是一个代码示例:
if (Gdx.input.isButtonPressed(Buttons.LEFT))
{
Vector3 input = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0);
cam.unproject(input);
//Now you can use input.x and input.y, as opposed to Gdx.input.getX() and
//Gdx.input.getY(), to draw the circle
s.drawCirc(c, input.x, input.y, 100, 100);
}
答案 1 :(得分:1)
LibGDX使用另一个坐标系的OpenGL。
它使用从左到右,从下到上。
所以在OpenGL 0,0中意味着左下角。
使用
c = new OrthographicCamera();
c.setToOrtho(true, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
第一个参数表示Y-Down
此处提供更多信息:http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/OrthographicCamera.html
检查此链接以获取有关使用带有down-y的LibGDX的更多信息。 https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/YDownTest.java