【问题标题】:libGdx - Drawing in a second viewport?libGdx - 在第二个视口中绘图?
【发布时间】:2016-02-07 11:43:12
【问题描述】:

我的 Tiled 2D 平台游戏的虚拟大小为 800x480,我使用 StretchViewport 作为我的 Stage. 我将游戏摄像机设置如下:

camera = new BoundedCamera(18, 10, map.width, map.height);

BoundedCamera 只是用一些额外的代码扩展了OrthographicCamera,这样当玩家向地图边缘移动时,地图就会停留在屏幕内。

render() 我愿意:

camera.setPosition(player.getX(), player.getY());
camera.update();

tiledRenderer.setView(camera);
tiledRenderer.render();

一切正常。现在我想实现一个小地图,我想在 (0, 380) 处显示大小为 (100, 100) 的小地图。所以我创建了第二个摄像头和一个ScalingViewport

minimapCamera = new OrthographicCamera(18, 10);

minimapViewport = new ScalingViewport(Scaling.none, map.width, map.height, minimapCamera);
minimapViewport.setScreenBounds(0, 380, 100, 100);

对于渲染,我会这样做:

public void renderMinimap()
{
    minimapViewport.apply();

    minimapBatch.begin();

    minimapCamera.position.set(player.getX(), player.getY());
    minimapCamera.update();

    minimapRenderer.setView(minimapCamera);
    minimapRenderer();

    minimapBatch.end();

    level.getStage().getViewport().apply();
}

但是,在上述情况下,小地图不会在视口范围内被“剪裁”。小地图层被绘制在视口边界的左侧和底部。

我做错了什么?

【问题讨论】:

    标签: camera libgdx screen viewport stage


    【解决方案1】:

    您不能简单地在视口上调用setScreenBounds,因为当您在视口上调用update 时,您所做的更改将被覆盖。 Libgdx 中的内置视口都有非常具体的定义行为,这些行为在其update 方法中实现。由于您需要不同的屏幕边界,因此您必须创建自己的 Viewport 类。您可以继承 ScalingViewport 并覆盖 update 方法。查看 ScalingViewport 的源代码并修改它调用setScreenBounds 的部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-14
      • 1970-01-01
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多