【问题标题】:LibGDX - Orthogonal Camera won't stop at edge of mapLibGDX - 正交相机不会停在地图边缘
【发布时间】:2014-02-16 05:29:09
【问题描述】:

我对 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,它是地图的一半……这当然行不通。

【问题讨论】:

    标签: java camera libgdx orthogonal tiled


    【解决方案1】:

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

    x 的最小值需要为:

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

    最大 x 需要是:

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

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

    【讨论】:

      【解决方案2】:

      您需要将相机矩形的边界固定在世界矩形内。下面的函数会有所帮助:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-30
        • 1970-01-01
        相关资源
        最近更新 更多