私はAndroidゲーム開発の初心者で、libgdx ShapeRendererを使い始めてもう少し検索を行った後、右足から始めると混乱しました。
ですから、私が本当に知りたいのは、ShapeRenderer、Mesh + SpriteBatch、Box2D、Scene2Dをいつ使用すべきかということです。
LibGDXには、レンダリング用の(ほとんど直交する)APIがかなりたくさんあります。私はまだそれらの多くを回避する方法を学んでいますが、さまざまな部分の概要を説明することができます。
ShapeRenderer
基本的なフラットカラーのポリゴンとラインをすばやく簡単に画面に配置できます。特に効率的ではありません(レンダリングごとに多くの頂点データをアップロードします)。しかし、それは非常に迅速に開始できます。画面に強く向けられています(デフォルトでは全画面の正投影プロジェクトであり、その単位は通常ピクセルです)。
このMesh
クラスを使用すると、ジオメトリをより直接的に制御できますが、より多くの詳細(色をフロートとしてエンコードし、頂点データ、カラーデータ、テクスチャデータをすべて同じフロート配列に格納するなど)や、インデックス配列)。
はSpriteBatch
「スプライト」(通常、テクスチャが含まれる長方形の領域)を中心に配置されます。これにより、メッシュを使用したテクスチャリングの複雑さ(および柔軟性)の一部が隠されます。
Box2Dは物理モデリング用であり、あなたが言及した他のAPIパーツ(主にレンダリングに関するもの)とは異なります。
最後に、Scene2Dは主に、ボタン、リスト、スライダーなどのアニメーション化されたユーザーインターフェイス要素を作成することを目的としています。しかし、十分に強力であり(アニメーションやインタラクションイベントを十分にきちんと柔軟にサポートしているため)、かなりの数の「ゲーム」を実装することもできます。
生の「OpenGL」コマンド(を参照GL20
)を使用することもできます。
これらの異なるプリミティブを完全に組み合わせることができます(1つの注意点は、通常、異なるフレーバーを開始する前に、レンダリングするShapeRenderer
ものを「フラッシュ」および「終了」する必要があることですSpriteBatch
) 。Mesh
したがって、たとえば、ゲームの「メインメニュー」といくつかのメタアクションにScene2Dを使用し、ゲームSpriteBatch
のコアをレンダリングし、ShapeRenderer
デバッグオーバーレイを生成するために使用することができます(バウンディングボックスの視覚化などを考えてください)。
また、libGDXのほとんどは2Dを対象としていることにも注意してください。RawOpenGL
およびMesh
APIを使用して、3Dオブジェクトを構築することもできます。
gdx-invadersの例をチェックして、、 Mesh
OpenGL、およびをどのように使用するかを確認してくださいSpriteBatch
。(この例はScene2dよりも前のものだと思うので、そのどれもありません...)。また、これらのクラスの実装を調べて、カバーの下で何をしているのかを確認することも価値があります。