現在、LibGDX を使用してゲームを開発していますが、次のような状況になりました。
- ゲームは
TiledMap
、その中の各レベルのマップを使用します。大きなタイル セットを作成し、それを ~1300x1300 の PNG ファイル (非 POT) にパックしました。タイルは 128x128 + ガターです。 シーンは を使用してレンダリングされます
OrthogonalTiledMapRenderer
。実際には、組み込みの をわずかに変更したものでOrthogonalTiledMapRenderer
、カメラ プロジェクションをSpriteBatch
レンダラーに設定せず、ループごとに余分なフラッシュを発生させます。private class OrthogonalTiledMapRenderer2 extends OrthogonalTiledMapRenderer { public OrthogonalTiledMapRenderer2 (TiledMap map, float unitScale, Batch batch) { super(map, unitScale, batch); } @Override public void setView (OrthographicCamera camera) { //batch.setProjectionMatrix(camera.combined); //This causes an unneeded flush in my case: the projection matrix is already set. float width = camera.viewportWidth * camera.zoom; float height = camera.viewportHeight * camera.zoom; viewBounds.set(camera.position.x - width / 2, camera.position.y - height / 2, width, height); } }
tiledMap のレンダリングを開始する前に、他のいくつかのオブジェクト (敵、アイテム、アクティブな要素) を描画します。マップのすべてのセルにタイルがあるわけではないため、これはこのようにする必要があり、これらのオブジェクトを一部のタイルの下に隠したいと考えています。これらのオブジェクトはすべて同じカメラ プロジェクションを共有する
SpriteBatch
ため、これらのオブジェクトをレンダリングするときに を開始し、マップ レンダラーを開始するときに開いたままにします。これらのオブジェクトはすべて現在、サイズが約 1000x1000 のテクスチャにパックされていますが、タイルセットの領域にラップできるように、多数の小さなオブジェクトで構成されています (以下を参照)。つまり、次のようになります。@Override public void render(float delta) { Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); batch.setProjectionMatrix(camera.combined); batch.begin(); for (Thing t : things) { t.draw(batch); } orthogonalTiledMapRenderer2.setView(camera); orthogonalTiledMapRenderer2.render(tileLayer); //Uses the same batch //... batch.end(); }
ここではっきりしたことがあります。私の計画は、TiledMap
タイル セットとオブジェクト シートの両方を単一の 2 乗テクスチャ (手頃なサイズの 2048x2048) にパックすることです。 GPU へのバッチ フラッシュ。問題は、を使用せずにTiledMap
、外部を使用してをロードする方法が見つからないことです。SpriteRegion
AtlasTmxTiledMapLoader
誰かが私を正しい方向に向けることができますか? 新しい到達不能な を作成し、マップ用に 1 回フラッシュし、残りのスプライト用にもう一度フラッシュする代わりに、TiledMap
渡す aをタイルセットとしてロードする方法はありますか?TextureRegion
Texture