2

我对 libgdx 和 java 还很陌生,但我正在尽我所能学习!我正在开发一个正交 2d 平铺游戏。基本上,我让我的角色四处走动,镜头跟随他。我正在尝试设置它,以便当角色靠近地图边缘时相机停止,因此看不到黑色空间。相机应该停在边缘,玩家应该继续移动。

这是我移动相机的代码。现在有点乱,因为我一直在尝试一切。地图为 30x30。

if (mainPlayer.getPosition().x >= 15 && mainPlayer.getPosition().x <= 30) {
    camera.position.x = mainPlayer.getPosition().x;     
}

camera.position.y = mainPlayer.getPosition().y;

camera.update();
camera.apply(gl);

这是在我的渲染方法中。我只弄乱了 x 部分,所以暂时忽略 y 。

编辑我想我需要重新措辞。我知道如何让它停止..它使用我的代码工作,但我不知道如何确定在哪里停止它。我在上面的代码中使用了 15,这是地图的一半……这当然行不通。

4

2 回答 2

2

编辑我想我需要重新措辞。我知道如何让它停止..它使用我的代码工作,但我不知道如何确定在哪里停止它。我在上面的代码中使用了 15,这是地图的一半……这当然行不通。

最小x需要是:

map.position.x + camera.viewportWidth/2;

并且最大x需要是:

map.position.x+mapwidth-camera.viewportWidth/2;

假设地图位置在 (0,0) 中,您可以忽略该map.position.x部分。

于 2014-01-25T03:18:14.420 回答
0

您需要将相机矩形的边界固定在世界矩形内。如下所示的功能将有所帮助:

public void fixBounds() {
    float scaledViewportWidthHalfExtent = viewportWidth * zoom * 0.5f;
    float scaledViewportHeightHalfExtent = viewportHeight * zoom * 0.5f;

    // Horizontal
    if (position.x < scaledViewportWidthHalfExtent)
        position.x = scaledViewportWidthHalfExtent;
    else if (position.x > xmax - scaledViewportWidthHalfExtent)
        position.x = xmax - scaledViewportWidthHalfExtent;

    // Vertical
    if (position.y < scaledViewportHeightHalfExtent)
        position.y = scaledViewportHeightHalfExtent;
    else if (position.y > ymax - scaledViewportHeightHalfExtent)
        position.y = ymax - scaledViewportHeightHalfExtent;
}
于 2016-12-29T04:49:47.787 回答