2017-02-09 77 views
0

我在LibGDX中遇到了一个问题,当我调用Gdx.input.getY()时,它选择了应用程序另一侧相对于屏幕中心的像素。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

因此,从总高度中减去该值。 – hexafraction

+0

左上角是0,0,这就是OpenGL的工作原理。 –

+0

只要窗口和相机不改变尺寸,两种答案都是正确的。正确的做法是使用camera.unproject()将屏幕坐标转换为世界坐标。 – Tenfour04

回答

2

减去与触摸位置将无法正常工作视高度,因为那将是减去世界坐标与触摸坐标。 (甚至对于像素完美的投影,它将是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(); 
} 

我建议阅读以下页面,这说明这一点,并在细节背后的推理:

0

这是更好地尝试这种

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