2014-04-17 59 views
2

我相信這是非常簡單的事情。我有一個重大的腦凍結。我一直在反轉它,從它中減去它,再乘以它,加上它。無論發生什麼事情都是倒下來的。LibGDX向下向上向下Gdx.input.getY()

if (Gdx.input.isButtonPressed(Buttons.LEFT)) s.drawCirc(c, Gdx.input.getX(), Gdx.input.getY(), 100, 100); 

x軸很好,罪魁禍首是Gdx.input.getY()。當我將手指向上移動時,它會向上下移動。

我的圓圈排列在中間,但是當我上去時,它會下降,當我下去時它會上升。 (&當然如何修復它)

如果你需要知道c是我的相機,這裏是代碼,以防萬一這是我使用

shapeRenderer.setProjectionMatrix(c.combined); 

回答

1

這是因爲用於輸入的座標系和攝像機使用的座標系在y軸上彼此相反。理想情況下,在獲取輸入時,您想要將輸入取消投影到相機,以便所有座標都能很好地對齊。你可以使用c.unproject(input)來做到這一點。這裏有一個代碼示例:

if (Gdx.input.isButtonPressed(Buttons.LEFT)) 
{ 
    Vector3 input = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0); 
    cam.unproject(input); 
    //Now you can use input.x and input.y, as opposed to Gdx.input.getX() and 
    //Gdx.input.getY(), to draw the circle 
    s.drawCirc(c, input.x, input.y, 100, 100); 
} 
+0

我會如何數學翻轉Y使其匹配?我只是想出於好奇而知道。另外爲了澄清LibGDX 0,0是左下角? OpenGL是左上角?只是試圖更好地形象化。 – CodeCamper

+0

OpenGL,因此攝像頭(使用OpenGL)在左下角都有0,0。但是,輸入系統在左上角使用0,0。由於相機可以改變比例和位置,因此在兩者之間轉換時沒有簡單的數學方法,因此建議您在兩者之間轉換時使用未投影方法。但是,如果您的相機顯示整個世界並且沒有以任何其他方式進行縮放或轉換,只需使用SCREEN_HEIGHT - Gdx.input.getY()即可實現。不過這不推薦。 – kabb

+0

可以在每個渲染事件上創建新的Vector3和unproject嗎? – CodeCamper

1

LibGDX罪魁禍首

c = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 

,並在我的drawCirc方法使用它使用另一個座標系中的OpenGL。

它從左到右,從下到上使用。

所以在OpenGL 0,0意味着左下角。

使用 c = new OrthographicCamera(); c.setToOrtho(true, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());

第一個參數是指Y型向下

點擊此處瞭解詳情:http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/OrthographicCamera.html

檢查此鏈接瞭解如何使用LibGDX有羽絨-Y的更多信息。 https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/YDownTest.java

+0

是否有一個等式我可以對Y進行修正而不會翻轉所有內容? – CodeCamper