【问题标题】:Libgdx - spliting screen and being not able to change position of viewportLibgdx - 拆分屏幕并且无法更改视口的位置
【发布时间】:2020-03-13 21:29:21
【问题描述】:

我决定在 Libgdx 库中创建一个简单的游戏,但后来我遇到了问题。

问题在于将游戏玩法渲染到屏幕的固定位置。我想将屏幕拆分为以下部分:

  • 游戏会占用大约 70% 的屏幕空间,
  • 人物装备,
  • 聊天。

但我仍然无法设置视口的位置。让我们说一下我是如何理解视口和相机概念的。如果我错了,请改变主意。

相机决定当前应该看到世界的哪个部分。例如,我有一个大小为 500x500px 的图像,如果世界大小固定为 200x200px,那么我只能看到图像的 200x200px 部分。

视口是负责为固定“窗口”翻译相机视图的东西。例如,如果当前相机显示 200x200px 部分,则视口可以缩放到固定大小(例如全屏)。

如果我正确理解了这些概念,我会尝试将游戏视口的大小设置为屏幕宽度和高度的 70%,它工作正常。多亏了这一点,我看到了我的世界在上面给定的大小。 当我想使用 ViewPort.setScreenPosition 方法将游戏视口移动到左上角时,问题就开始了。调用函数不会影响游戏视图位置。

下面是我的原型代码。

public class MyGdxGame extends ApplicationAdapter {
    private static final int WORLD_WIDTH = 250;
    private static final int WORLD_HEIGHT = 250;
    private SpriteBatch spriteBatch;
    private Texture texture;
    private OrthographicCamera gameplayCamera;
    private Viewport gameplayViewPort;

    @Override
    public void create() {
        spriteBatch = new SpriteBatch();
        texture = new Texture("life.png");

        gameplayCamera = new OrthographicCamera();
        gameplayCamera.translate(gameplayCamera.viewportWidth / 2.0f, gameplayCamera.viewportHeight / 2.0f);

        gameplayViewPort = new ExtendViewport(WORLD_WIDTH, WORLD_HEIGHT, gameplayCamera);
        gameplayViewPort.setScreenPosition(0, Gdx.graphics.getHeight() / 4);
        gameplayViewPort.apply();

        gameplayCamera.position.set(WORLD_WIDTH / 2.0f, WORLD_HEIGHT / 2.0f, 0);
    }


    @Override
    public void render() {
        Gdx.gl.glClearColor(1, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        gameplayCamera.update();
        spriteBatch.setProjectionMatrix(gameplayCamera.combined);

        spriteBatch.begin();
        spriteBatch.draw(texture, 0, 0);
        spriteBatch.end();
    }

    @Override
    public void resize(int width, int height) {
        gameplayViewPort.update(width * 3 / 4, height * 3 / 4);
        gameplayCamera.position.set(width / 2.0f, height / 2.0f, 0);
    }

    @Override
    public void dispose() {
        texture.dispose();
    }
}

我希望您知道我的问题的任何适当解决方案,也许它根本与操作视口无关。 ;)

Expected effect

【问题讨论】:

  • Tkank 你,我以前没见过这个话题。它解决了我的问题,但我也想知道为什么调用函数 ViewPort.setPosition 不影响。

标签: split camera libgdx screen viewport


【解决方案1】:

我已经浏览了一些 libgdx 的文档,并找到了关于多视口的部分。 https://github.com/libgdx/libgdx/wiki/Viewports

添加行后

viewport.apply().

在 render 方法而不是 create 方法中,一切都开始正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多