我已经决定在Libgdx库中创建一个简单的游戏,但是过了一会儿我遇到了问题。
问题在于将游戏玩法呈现在屏幕上的固定位置。我想将屏幕分为以下几个部分:
但是我仍然无法设置视口的位置。让我们说说我如何理解视口和摄影机概念。如果我错了,请改变主意。
相机决定当前应该看世界的哪一部分。例如,我有一幅尺寸为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();
}
}
我希望您知道我的问题有任何适当的解决方案,也许它根本与操纵视口无关。 ;)
我已经遍历了libgdx的文档,找到了关于乘法视口的部分。https://github.com/libgdx/libgdx/wiki/Viewports
添加行后
viewport.apply().
在渲染方法中而不是创建方法中,一切都开始正常工作。