視口

為了支援多種解析度和寬高比,Libgdx 使用了所謂的 Viewports
有幾種型別的 Viewports 使用不同的策略來處理多種解析度和寬高比。
一個 Viewport 使用了引擎蓋下的 Camera 並管理它的 viewportHeightviewportWidth。你可以選擇在其建構函式中為 Viewport 提供 Camera,否則預設情況下將使用 OrthographicCamera

private Viewport viewport;
private Camera camera;

public void create() {
   camera = new PerspectiveCamera();
   viewport = new FitViewport(8f, 4.8f, camera);
}  

此外,你必須將 worldWidthworldHeight 指定給視口的建構函式。此空間將表示將用於指定要繪製的物件位置和大小的虛擬座標系。例如,可以應用於 SpriteBatch 的視口轉換將自動處理將邏輯座標轉換為實際螢幕座標,其方式符合你正在使用的視口的實際型別。例如,當使用正投影(OrthographicCamera,這是預設設定)時:如果你的世界尺寸為 12.8 x 7.8 米且裝置螢幕為 2560x1560 畫素,那麼你的世界將以每米 200 畫素動態投影。

Viewports 尺寸發生變化時(例如,如果智慧手機的螢幕方向正在改變),你需要通知 Viewport 該更改。然後它將自動更新 Cameras viewportHeightviewportWidth

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

Viewports 還管理 OpenGL Viewport 並根據需要修改可繪製區域。

Viewports 還關注將螢幕座標轉換為遊戲座標,這對於拾取尤其需要:

private Vector2 worldPos = new Vector2();
public boolean touchDown (int x, int y, int pointer, int button) {
    worldPos.set(x, y);
    viewport.unproject(worldPos);
    processPicking(worldPos);
}