1

現在、LibGDX を使用してゲームを開発していますが、次のような状況になりました。

  1. ゲームはTiledMap、その中の各レベルのマップを使用します。大きなタイル セットを作成し、それを ~1300x1300 の PNG ファイル (非 POT) にパックしました。タイルは 128x128 + ガターです。
  2. シーンは を使用してレンダリングされます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);
        }
    }
    
  3. 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、外部を使用してをロードする方法が見つからないことです。SpriteRegionAtlasTmxTiledMapLoader

誰かが私を正しい方向に向けることができますか? 新しい到達不能な を作成し、マップ用に 1 回フラッシュし、残りのスプライト用にもう一度フラッシュする代わりに、TiledMap渡す aをタイルセットとしてロードする方法はありますか?TextureRegionTexture

4

1 に答える 1