視口
為了支援多種解析度和寬高比,Libgdx 使用了所謂的 Viewports
。
有幾種型別的 Viewports
使用不同的策略來處理多種解析度和寬高比。
一個 Viewport
使用了引擎蓋下的 Camera
並管理它的 viewportHeight
和 viewportWidth
。你可以選擇在其建構函式中為 Viewport
提供 Camera
,否則預設情況下將使用 OrthographicCamera
:
private Viewport viewport;
private Camera camera;
public void create() {
camera = new PerspectiveCamera();
viewport = new FitViewport(8f, 4.8f, camera);
}
此外,你必須將 worldWidth
和 worldHeight
指定給視口的建構函式。此空間將表示將用於指定要繪製的物件位置和大小的虛擬座標系。例如,可以應用於 SpriteBatch 的視口轉換將自動處理將邏輯座標轉換為實際螢幕座標,其方式符合你正在使用的視口的實際型別。例如,當使用正投影(OrthographicCamera
,這是預設設定)時:如果你的世界尺寸為 12.8 x 7.8 米且裝置螢幕為 2560x1560 畫素,那麼你的世界將以每米 200 畫素動態投影。
當 Viewport
s 尺寸發生變化時(例如,如果智慧手機的螢幕方向正在改變),你需要通知 Viewport
該更改。然後它將自動更新 Camera
s viewportHeight
和 viewportWidth
:
public void resize(int width, int height) {
viewport.update(width, height);
}
Viewport
s 還管理 OpenGL Viewport
並根據需要修改可繪製區域。
Viewport
s 還關注將螢幕座標轉換為遊戲座標,這對於拾取尤其需要:
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);
}