【问题标题】:LibGDX resolution independenceLibGDX 分辨率独立性
【发布时间】:2014-04-04 00:56:34
【问题描述】:

我已经在谷歌和这个网站上搜索了有关此问题的信息,但无法解决它..

我是游戏开发和 LibGDX 方面的新手,找不到很好的解决方案来解释如何将我的游戏移植到所有不同的屏幕尺寸。

你能帮帮我吗?

感谢

【问题讨论】:

    标签: java android libgdx


    【解决方案1】:

    当使用最新的 libgdx 版本时,你会发现 Viewport 类...

    视口描述了屏幕坐标系(即从左下角的 0,0 到例如右上角的 1280,768 的像素(取决于设备))到你的游戏和场景。

    Viewport 类对如何进行这种转换有不同的可能性。它可以拉伸您的场景坐标系以完全适合屏幕坐标系,这可能会改变纵横比,例如“拉伸”您的图像或按钮。

    也可以将具有纵横比的场景视口调整到视口中,这可能会产生黑色边框。例如。当您为 4:3 屏幕开发游戏并现在将其嵌入到 16:10 显示器中时。

    (在我看来)最好的选择是通过匹配最长或最短边将场景视口适配到屏幕中。

    这样,您可以拥有从 (0,0) 到 (1280,768) 的屏幕/窗口坐标系,并在横向模式下创建可能从 (0,0) 到 (16,10) 的游戏坐标系。当匹配最长边时,这意味着屏幕的左下角将是(0,0),右下角将是(16,0)......在没有相同纵横比的设备上,上角的 y 值可能会有所不同。

    或者当匹配最短边时,这意味着您的场景坐标将始终显示从 (x,0) 到 (x,10) ...但是右边缘可能不完全具有 x 值 16,因为设备分辨率不同...

    使用该方法时,您可能需要重新定位一些按钮或 UI 元素,而它们应该呈现在顶部或右边缘...

    希望对你有帮助...

    【讨论】:

      【解决方案2】:

      曾经我也遇到过这个问题,但最后我得到了可行的解决方案,在 libgdx 中使用 SpriteBatchStage 绘制任何东西。使用OrthographicCamera 我们可以做到这一点。

      首先选择一个最适合游戏的恒定分辨率。这里我拍了1280*720(横向)。

      class ScreenTest implements Screen {
      
          final float appWidth = 1280, screenWidth = Gdx.graphics.getWidth();
          final float appHeight = 720, screenHeight = Gdx.graphics.getHeight();
      
          OrthographicCamera camera;
      
          SpriteBatch batch;
          Stage stage;
      
          Texture img1;
          Image img2;
      
          public ScreenTest() {
              camera = new OrthographicCamera();
              camera.setToOrtho(false, appWidth, appHeight);
      
              batch = new SpriteBatch();
              batch.setProjectionMatrix(camera.combined);
      
              img1 = new Texture("your_image1.png");
              img2 = new Image(new Texture("your_image2.png"));
              img2.setPosition(0, 0); // drawing from (0,0)
      
              stage = new Stage(new StretchViewport(appWidth, appHeight, camera));
              stage.addActor(img2);
          }
      
          @Override
          public void render(float delta) {
              batch.begin();
              batch.draw(img, 0, 0);
              batch.end();
      
              stage.act();
              stage.act(delta);
              stage.draw();
      
              // Also You can get touch input according to your Screen.
              if (Gdx.input.isTouched()) {
                  System.out.println(" X " + Gdx.input.getX() * (appWidth / screenWidth));
                  System.out.println(" Y " + Gdx.input.getY() * (appHeight / screenHeight));
              }
          }
          // ...
      }
      

      以任何类型的分辨率运行此代码,它将在该分辨率下调整而不会受到任何干扰。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-22
        • 1970-01-01
        • 1970-01-01
        • 2010-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-01
        相关资源
        最近更新 更多