2016-02-28 51 views
0

我有一個libGDX代碼,我不明白爲什麼它不起作用。 我的想法如下:我用紋理創建一個精靈,如果我點擊這個精靈,那麼應該發生一些事情。到現在爲止還挺好。libGDX X和Y鼠標輸入

我使用以下代碼創建精靈:
X = 0.1f; Y = 0.5f;

這工作得很好......

  Sprite spr = new Sprite(texture); 

     // Define sprite size to be 1m x 1m in game world 
     spr.setSize(1, 1); 

     // Set origin to sprite's center 
     spr.setOrigin(spr.getWidth()/2.0f, spr.getHeight()/2.0f); 

     // Calculate random position for sprite 
     float randomX = 0.1f; 
     float randomY = 0.5f; 
     spr.setPosition(randomX, randomY); 

     // Put new sprite into array 
     testSprites[i] = spr; 

現在我想鼠標的X和Y位置,當我點擊。 但是,當我嘗試一下與Systemout,我得到以下座標: X輸入:748 X雪碧位置:0.1

精靈位置是正確的,但X輸入(Gdx.input.getX)應也是0.1左右,但遠遠不夠。有沒有我不考慮的東西?

 if (Gdx.input.isButtonPressed(Buttons.LEFT)) 
     System.out.println("X Input: "+ Gdx.input.getX()); 
     System.out.println("X Sprite Position: "+testSprites[1].getX()); 
+0

而不是isButtonPressed你應該使用InputProcessor。顯示渲染方法。您是否將屏幕座標投影到世界座標? –

回答

2

看看this article。您將觸摸/鼠標座標(像素)與世界座標(例如米)進行比較,而無需轉換它們。您可以使用或Viewportunproject方法將輸入座標轉換爲世界座標。您沒有提供足夠的信息來查看您正在使用的信息,但假設您使用的是Camera,則可以執行以下操作。

Vector3 mousePos = new Vector3(); 
camera.unproject(mousePos.set(Gdx.input.getX(), Gdx.input.getY(), 0)); 
System.out.println("X Input: "+ mousePos.x); 

當然,你不應該使用new關鍵字頻繁調用的代碼,讓你更好的mousePos變量移到類成員。

0

你從鼠標得到的位置是屏幕座標。你需要將它們投射到世界座標上(或者不要投射它們)。由於您使用的是OrthographicCamera,這是一個簡單的修復方法。

Vector3 mouse = new Vector3(Gdx.input.getX, Gdx.input.getY, 0); 
camera.unproject(mouse); 

System.out.println(mouse);