我目前正在使用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的纹理,但是它由许多小对象组成,因此可以将它们包裹在tileet的区域周围(请参阅下文)。事情就这样了:

@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();
 }



现在,事情已经很清楚了:我的计划是将所有内容打包为一个单一的Power-Of-Two纹理(大小为2048x2048),包括TiledMap磁贴集和对象表,因此我使用单个纹理并我可以最大程度地减少对GPU的批量刷新。问题是我找不到使用外部TiledMap加载方法的方法,甚至没有使用SpriteRegion加载方法。

谁能指出我正确的方向?有没有一种方法可以加载通过AtlasTmxTiledMapLoader作为图块集的TiledMap,而不是创建一个新的,无法访问的TextureRegion,并且必须一次刷新地图,然后再次刷新其余的sprite?

最佳答案

我还没有做到这一点,但是您应该能够将单个“二次幂”纹理图集传递给使用地图级属性“图集”,只要区域的名称正确。

从Javadoc ...


  公共类AtlasTmxMapLoader扩展BaseTmxMapLoader
  
  一个TiledMap加载器,它从TextureAtlas加载而不是从Tile加载
  单独的图像。它需要一个带有“ atlas”的地图级属性,
  其值是TextureAtlas的相对路径。地图集必须
  其中包含以地图中使用的图块集命名的索引区域。
  索引应位于图块集的本地(而不是全局ID)。跳闸
  创建图集时,不应使用空格和旋转。

09-25 21:47