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