LibGDX - 正交相机不会停在地图的边缘

时间:2014-01-25 02:37:38

标签: java camera libgdx orthogonal tiled

我对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,这是地图的一半..当然不起作用。

2 个答案:

答案 0 :(得分:2)

  编辑我认为我需要改写它。我知道如何让它停止......它   使用我的代码工作,但我无法弄清楚如何确定在哪里   停下来。我在上面的代码中使用了15,这是地图的一半......其中   当然不起作用。

最低 x 需要:

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

最大 x 需要:

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

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

答案 1 :(得分:0)

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

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;
}