libGdx - 如何在第二个视口中绘制图形?

3

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

然而,以上方法无法使小地图在视口范围内被“裁剪”。小地图层会在视口边界的左下方略微绘制。

我做错了什么?

1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接