使用具有OrthogonalTiledMapRenderer

时间:2018-02-18 12:39:45

标签: java libgdx tiled

我正在尝试让地图像这样渲染(底部图片):enter image description here

我认为最好的方法是使用PerspectiveCamera,所以我设置了这样的相机和渲染器:

    // in show
    camera = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    camera.position.set(0, 150, 100);
    camera.lookAt(0, 0, 0);
    camera.far = 1000;
    camera.update();
    batch = new SpriteBatch();

    tiledMap = new TmxMapLoader().load("map.tmx");
    tiledMapRenderer = new OrthogonalTiledMapRenderer(tiledMap, batch);

    // in render (after glClear)
    camera.update();
    batch.setProjectionMatrix(camera.projection);
    tiledMapRenderer.render();

然而,这根本不会渲染地图。如果我删除设置投影矩阵的线,则地图仅渲染如下: enter image description here

我在这里看到了类似的问题,但这并没有解释解决方案,人们使用了一个不再存在的参数。我怎样才能达到预期的效果?

1 个答案:

答案 0 :(得分:1)

我知道我迟到了,但这是 100% 可能的。

问题

我在调试器内部单步执行了 gdx,发现渲染器只渲染了几个图块,因为它无法正确计算剔除视锥体,因为它对相机一无所知。

通常,您会使用 r.setView() 将视口传递给供稿渲染器,但这只接受正交相机。

解决办法

相反,您必须使用姊妹方法手动指定视口区域(位置和大小),并进行调整:

r.setView(cam.combined, cam.position.x - cam.viewportWidth * 0.5f , cam.position.y, cam.viewportWidth, cam.viewportHeight)

使用此相机的两个快速注意事项:

1)fieldOfView 是 Orthographic 缩放最接近的替代品,

但是需要注意的是,视野和渲染器的视口应该紧密匹配。

如果您的渲染器的剔除区域大于相机的查看区域,则渲染超出可见区域会浪费时间。

我建议考虑将上述内容与 FOV 一起缩放。

  1. 透视相机不能用于渲染舞台 UI。

改为并行使用正交相机,或者更好的是在 Stage() 的构造函数中创建的默认正交相机。

多个摄像头将渲染到同一个屏幕上;先展示你的世界,然后过度渲染你的 HUD。