2017-02-09 7 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();