【发布时间】: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();
}
}
我希望您知道我的问题的任何适当解决方案,也许它根本与操作视口无关。 ;)
【问题讨论】:
-
Tkank 你,我以前没见过这个话题。它解决了我的问题,但我也想知道为什么调用函数 ViewPort.setPosition 不影响。
标签: split camera libgdx screen viewport