翻转了Gdx.input.getY

时间:2017-02-09 22:49:37

标签: java libgdx

我在LibGDX中遇到一个问题,当我调用Gdx.input.getY()时,它会选择应用程序另一侧相对于屏幕中心的像素。

screenshot

public class Main extends ApplicationAdapter {
private SpriteBatch batch;
private Texture img;
private OrthographicCamera camera;
int xPos;
int yPos;
private Vector3 tp = new Vector3();
BitmapFont font;

@Override
public void create () {
    batch = new SpriteBatch();
    img = new Texture("crosshair.png");
    camera = new OrthographicCamera();
    camera.setToOrtho(false, 1280, 720);
    font = new BitmapFont();

}

@Override
public void render () {
    yPos = Gdx.input.getY();
    xPos = Gdx.input.getX();
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    camera.unproject(tp.set(xPos, yPos, 0));
    batch.begin();
    font.draw(batch,xPos + " , " + yPos, Gdx.input.getX() - 25, Gdx.input.getY() - 5);
    batch.draw(img, xPos, yPos);
    batch.end();
}

@Override
public void dispose () {
    batch.dispose();
    img.dispose();
}

2 个答案:

答案 0 :(得分:3)

使用触摸位置减去视口高度不会起作用,因为这将使用触摸坐标减去世界坐标。 (甚至对于像素完美投影,它将是height - 1 - y)。而是使用unproject方法将触摸坐标转换为世界坐标。

您的代码存在两个问题:

  • 您永远不会设置批量投影矩阵。
  • 即使您使用的是unproject方法,也绝不会使用其结果。

所以改为使用以下内容:

@Override
public void render () {
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    batch.setProjectionMatrix(camera.combined);
    batch.begin();
    camera.unproject(tp.set(Gdx.input.getX(), Gdx.input.getY(), 0));
    font.draw(batch,tp.x+ " , " + tp.y, tp.x - 25, tp.y - 5);
    batch.draw(img, tp.x, tp.y);
    batch.end();
}

我建议阅读以下页面,其中详细描述了这一点及其背后的原因:

答案 1 :(得分:0)

最好试试这个

yPos = camera.viewportHeight - Gdx.input.getY();