libgdxのTexture、TextureRegion、TextureAtlas、Sprite、Imageの違いは何ですか?


12

チュートリアルを探してみました。上記のクラスを使用して画像をロードする人を見てきました。

私の理解によると、すべてのクラスは2の累乗ではないイメージで読み取ることができます。TextureRegion/ TextureAtlasは通常、シートに複数のイメージが含まれているスプライトシートをロードするために使用されます。Texture / Sprite / Imageの場合は、単一の画像を含むスプライトシートをロードするために使用されます。

ただし、どのような状況でTexture / Sprite / Imageを使用する必要があるか、どのような状況でTextureRegion / TextureAtalsを使用する必要があるかはよくわかりません。

さまざまなチュートリアルを調べた後、APIの用語に少し混乱しているので、間違っている場合は修正してください。

回答:


18

まず、Texture vs TextureRegion:Texture t = new Texture(path)のようなことをすると、それをGPUにロードします。さらに、2つの累乗のテクスチャをロードする必要があります。他の解像度(Texture.setEnforcePotImages = false)で作業することもできますが、pow of 2を使用することをお勧めします。

今回、TextureRegionは、次元に関係なく、テクスチャから「ピース」を取得します。1つのテクスチャとそのテクスチャの複数のTextureRegionを持つ利点は、すべての領域をGPUにロードしないことです。

ご想像のとおり、SpriteBatchを使用して描画する場合は、複数のテクスチャの代わりにTextureRegionを使用する方がはるかに効率的です。ここに良い説明があります:Textures TextureRegion&SpriteBatch


ここで、TextureRegionと1つの画像を2の累乗の解像度で使用し、すべてのスプライトシートと画像を使用します。すべての座標と寸法でTextureRegionsを作成する必要がありますか?ピクセルを数えるためにペイントを開く必要がありますか?いいえ、ありません。TexturePackerのようなものを使用できます。すべてのテクスチャを1つの画像にパックし、すべての寸法と座標を含む.packファイルを作成します。

TexturePacker

結果は次のようになります。

パック

テクスチャを作成する代わりに、次のようにTextureAtlasを作成します。

TextureAtlasを作成する

これで、TextureRegionsの作成は次のように簡単になります。

findRegion

(領域の名前は、拡張子のない元の画像の名前であることに注意してください)。


スプライトは、バッチを使用して2Dスプライトを描画するためのジオメトリ、色、およびテクスチャ情報を保持します。つまり、簡単に回転して移動できます。独自のEntityクラスを作成しましたが、Spriteクラスは必要ありません。あなたはおそらく同じことをするでしょう。このクラスは本当に便利だとは思いません。


画像クラスはアクターから継承します。つまり、ステージに追加できます。これはScene2Dパッケージの一部です。libgdxが初めてで、このパッケージについて知らない場合、これはこのクラスに関する十分な情報です。これは本当に興味深いトピックですが、この質問に答えることはできません。

それが役に立てば幸い :)


ありがとう!それは今より明確です。:)次に、TextureRegionをTextureから作成し、TextureRegionをTextureAtlasから作成するパフォーマンスについてはどうですか?
user15783

4
@ user15783新しい質問をしてください。
David J. Liszewski、2013

良い情報はたくさんありますが、この部分は不正確/誤解を招きます。「すべてのリージョンをGPUにロードしているわけではありません」実際、すべてのリージョンをGPUにロードしています。複数TextureRegionのがテクスチャの個別の(または重なり合った)部分を参照できるというだけのことですが、Texture常に画像全体を参照します。テクスチャの切り替えはコストがかかるため、これで十分です。あなたの説明はTextureRegionまばらなテクスチャ(la。GL_ARB_sparse_texture)を扱っているように聞こえますが、libGDXとそれが動作するほとんどのハードウェアはその拡張をサポートしていません。
bcrist 2015年

また、コードのスクリーンショットよりもSEのマークダウンコードブロックを優先してください。そうすれば、必要に応じて簡単にコピーして貼り付けることができます。コードブロックの各行を4つのスペースで開始するだけです。インラインコードスパンは、テキストを重大なアクセント(バック
ティック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.