2014-01-25 162 views
9

我正在使用LIBGDX的Android遊戲中工作。Libgdx獲得縮放觸摸位置

@Override 
public boolean touchDown(int x, int y, int pointer, int button) { 
    // TODO Auto-generated method stub 

    return false; 
} 

這裏,x和y返回設備屏幕的觸摸位置,其值在0和設備屏幕寬度和高度之間。

我的遊戲分辨率是800x480,並且它會在每臺設備上保持其縱橫比。 我想找出一種方式來獲得觸摸位置,與遊戲相關的矩形,這種圖像可以精確地解釋: enter image description here

有沒有辦法做到這一點? 我想與我的視窗觸摸位置.. 我用這種方式來保持寬高比 http://www.java-gaming.org/index.php?topic=25685.0

回答

12

未決項目您的聯繫。

讓用戶觸摸的Vector3對象:

Vector3 touch = new Vector3(); 

並使用相機轉換的屏幕觸摸座標,攝像機座標:

@Override 
public boolean touchDown(int x, int y, int pointer, int button){ 

    camera.unproject(touch.set(x, y, 0)); //<--- 

    //use touch.x and touch.y as your new touch point 

    return false; 
} 
+0

我是否需要取消所有觸摸事件?我只實現了「tap」功能,而不是「pan」功能。它似乎工作到目前爲止,但「泛」功能有時是「跳來跳去」,這可能是由於沒有投影「泛」功能? –

0

1-2 paintful小時後我finnaly找到了解決辦法..

if (Gdx.input.isTouched()) { 
     float x = Gdx.input.getX(); 
     float y = Gdx.input.getY(); 
     float yR = viewport.height/(y - viewport.y); // the y ratio 
     y = 480/yR; 

     float xR = viewport.width/(x - viewport.x); // the x ratio 
     x = 800/xR; 

     bubbles.add(new Bubble(x, 480 - y)); 

    } 

編輯:這是做這件事的一種老掉牙的方式,所以不要。

+1

什麼是視口? – ManishSB

7

在LibGDX的較新版本可以實現它與內置的視口。 首先選擇你喜歡的視口,這裏你需要的是FitViewport。 你可以在這裏讀到他們: https://github.com/libgdx/libgdx/wiki/Viewports
接下來,聲明並初始化視口,並通過您的分辨率和攝像頭:

viewport = new FitViewport(800, 480, cam); 

然後編輯你的「調整」屏幕類的方法是這樣的:

@Override 
public void resize(int width, int height) { 
    viewport.update(width, height); 

} 

現在無論你想獲得接觸點,你都需要根據新的分辨率將它們轉移到新點。幸運的是,視口類自動完成。

就這樣寫:

Vector2 newPoints = new Vector2(x,y); 
newPoints = game.mmScreen.viewport.unproject(newPoints); 

其中X和Y是在屏幕上,在第二行「newPoints」觸摸點得到的轉換後的座標。
現在你可以將它們傳遞到任何你想要的地方。

+0

這工作完美! (viewport.unproject) –

+0

保重,我打電話給viewport.getCamera()。unproject ..這是錯誤的。您必須在視口本身調用unproject,而不是視口相機。謝謝 – Matteo