LibGDXゲーム開発用のビューポート



Viewports Libgdx Game Development



元のリンク: https://github.com/libgdx/libgdx/wiki/Viewports
翻訳者:重慶グッドダディ [メール保護]
転載を拒否した

用語の比較

  • ビューポート-ビューポート

ビューポートビューポート

複数の画面に直面した場合、さまざまなサイズとアスペクト比の画面を処理するための処理戦略を開発する必要があります。カメラとステージは、Camera.project(vec、viewportX、viewportY、viewportWidth、viewportHeight)によるピックアップなどのビューポートをサポートします。
LibDGXは、この問題を処理するためのより便利な方法を提供します。 ビューポート (( ソース )。



使用法使用法

ビューポートは常にカメラのviewportWidthとviewportHeightを管理します。そのため、ビューポートのコンストラクターにカメラパラメーターを提供します。

private Viewport viewport private Camera camera public void create() { camera = new PerspectiveCamera() viewport = new FitViewport(800, 480, camera) }

サイズ変更イベントが発生するたびに、ビューポートに通知して更新する必要があります。これにより、ビューポートパラメータが自動的に再計算され、カメラが更新されます



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

さらに、glViewportを介してOpenGLビューポートが変更されるため、黒の境界線が増える可能性があり、黒の境界線領域をレンダリングできません。
ビューポートポリシーに黒い境界線が表示される場合、OpenGLビューポートは標準サイズにリセットされる可能性があり、棒グラフのサイズはViewport.getLeftGutterWidth()を介して照会できます。
これを行う方法の例については、を参照してください。 このテスト 。これは次のようになります(より適切な境界線の画像がある場合があります...)

ピッキングを完了する必要がある場合、ビューポートにはいくつかのメソッドが用意されています:project()/ unproject()/ getPickRay。これらのメソッドは、現在のビューポートを使用して正しいピッキングを行います。これは、画面座標系と世界座標系を変換する方法です。
ステージを使用する場合、サイズ変更イベントが発生したときにステージビューポートを更新する必要があります。

private Stage stage public void create() { stage = new Stage(new StretchViewport(width, height)) } public void resize(int width, int height) { // use true here to center the camera // that's what you probably want in case of a UI stage.getViewport().update(width, height, false) }

マルチビューポート

画面サイズの異なる複数のビューポート(またはglViewportを設定する他のコード)を使用する場合は、描画する前にビューポートを適用して、そのビューポートのglViewportを設定する必要があります。



viewport1.apply() // draw viewport2.apply() // draw When using multiple Stages: stage1.getViewport().apply() stage1.draw() stage2.getViewport().apply() stage2.draw()

ビューポートの動作を確認するには、次の例を見てください。 ViewportTest1ViewportTest2 そして ViewportTest3

ストレッチビューポートStretchViewport

ザ・ StretchViewport (( ソース )。
仮想画面サイズをサポートします。これは、画面のサイズが常にvirtualWidth * virtualHeightであると想定できることを意味します。
この仮想ビューポートは常に画面に合わせて引き伸ばされ、黒いエッジはありませんが、アスペクト比が変わる可能性があります。

FitViewport

FitViewport (( ソース )。
仮想画面サイズもサポートします。 StretchViewportとは異なり、FitViewportは、画面に適応しようとしている間、常に仮想画面サイズ(仮想ビューポート)のアスペクト比を維持します。 FitViewportの欠点の1つは、黒いエッジを作成できることです。

FillViewport

FillViewport (( ソース )も仮想画面サイズのアスペクト比を維持しますが、FitViewportと比較すると、FillViewportは常に画面全体に表示され、黒い境界線がないため、画面を超える部分がトリミングされます。

ScreenViewport

ザ・ ScreenViewport (( ソース )。
固定の仮想画面サイズはありませんScreenViewportは常にウィンドウのサイズと一致し、拡大縮小せず、黒い境界線はありません。その欠点は、画面サイズが大きいプレーヤーは、画面サイズが小さいプレーヤーよりも多くのゲームシーンを見る可能性があることです。

ExtendViewport

ザ・ ExtendViewport (( ソース )。
世界を特定の方向に拡張することにより、黒いエッジを作成せずに世界のアスペクト比を維持します。ワールドは最初にビューポートで拡大縮小され、次に短い方向がビューポートを満たすように長くなります。


ExtendViewportの最大サイズを設定できます。この場合、アスペクト比がサポートされている範囲外になると、黒いバーが追加されます。

CustomViewport

ビューポートからCustomerViewportを継承し、update(width、height)をオーバーライドすることで、さまざまな戦略を実装できます。
別の方法は、汎用のScalingViewportを使用して、他のビューポートではカバーされていない別のズームを提供することです。例として、Scaling.noneを提供します。これにより、常に同じサイズのままである完全な「StaticViewport」が生成されます。次のようになります。