2014-03-04 25 views
0

現在我已經開始學習android和libgdx,並試圖弄清楚屏幕和觸摸輸入如何在android中工作,現在我通過觸摸繪製矩形來測試觸摸位置。LibGDX android touch輸入不準確?

該矩形將在觸摸的X來繪圖,Y.

但是,當我做到了,當我觸摸左,它將繪製一個矩形上的權利,同樣的,如果我做相反的,它將畫在左邊。

如果我觸摸中心,它會將它畫在中間,但與我手指的觸摸真的不一樣。

檢測位置的準確方法是什麼?

public class myApp implements ApplicationListener { 
    private OrthographicCamera camera; 
    private SpriteBatch batch; 
    private Texture texture; 
    private Sprite sprite; 
    private ShapeRenderer shapeRender; 
    private Player player; 
    private ArrayList<Player> players; 

    @Override 
    public void create() {  
     float w = Gdx.graphics.getWidth(); 
     float h = Gdx.graphics.getHeight(); 

     camera = new OrthographicCamera(w, h); 
     shapeRender = new ShapeRenderer(); 

     batch = new SpriteBatch(); 

     texture = new Texture(Gdx.files.internal("data/libgdx.png")); 
     texture.setFilter(TextureFilter.Linear, TextureFilter.Linear); 

     TextureRegion region = new TextureRegion(texture, 0, 0, 512, 275); 

     sprite = new Sprite(region); 
     sprite.setSize(0.9f, 0.9f * sprite.getHeight()/sprite.getWidth()); 
     sprite.setOrigin(sprite.getWidth()/2, sprite.getHeight()/2); 
     sprite.setPosition(-sprite.getWidth()/2, -sprite.getHeight()/2); 
     this.players = new ArrayList<Player>(); 
    } 

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

    @Override 
    public void render() {  
     update(Gdx.graphics.getDeltaTime()); 
     renderGame(); 
    } 

    private void update(double delta) { 
     Input i = Gdx.input; 

     if (i.isTouched()) { 
      this.players.add(new Player(i.getX(), i.getY())); 
     } 
    } 

    private void renderGame() { 
     Gdx.gl.glClearColor(1, 1, 1, 1); 
     Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 
     //shapeRender.setProjectionMatrix(camera.combined); 
     if (players.size() > 0) { 
      shapeRender.begin(ShapeType.Filled); 
      shapeRender.setColor(Color.RED);    
      for (Player p : this.players) { 
       shapeRender.rect(p.getX(), p.getY(), 100, 100); 
      } 
      shapeRender.end(); 
     } 

    } 

    @Override 
    public void resize(int width, int height) { 
    } 

    @Override 
    public void pause() { 
    } 

    @Override 
    public void resume() { 
    } 
} 
+0

我想這是因爲手機的屏幕,它是,Y(0,0)點開始在右上角。 – Artemkller545

回答

0

這是因爲libgdx(當然,OpenGL的天然的)座標和觸摸輸入Y座標在不從相同的角測量。正如您已經注意到的那樣,觸摸座標相對於左上角,而libgdx座標相對於左下角。

你可以通過從高度減去手動反轉,或者你可以「修復」相機(可能是一個更好的主意)。

看到:https://stackoverflow.com/a/7751183/763530(從badlogic自己的答案)