我的目标是创建一个总是以9:16(基本上是16:9,但是直立)的纵横比显示的游戏,使用FitViewport
;它应该独立于目标设备的分辨率。为了测试这个设置,我创建了下面的最小工作示例。绿色的小正方形指示的坐标系的原点:libGDX:FitViewport中对象的大小变形
MyGame.java
public class MyGame extends ApplicationAdapter {
final int WORLD_WIDTH = 900;
final int WORLD_HEIGHT = 1600;
Stage stage;
Viewport vp;
public void create() {
stage = new Stage();
vp = new FitViewport(WORLD_WIDTH, WORLD_HEIGHT, stage.getCamera());
stage.setViewport(vp);
stage.addActor(new MySquare());
}
public void render() {
stage.act();
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.draw();
}
public void resize(int width, int height) {
stage.getViewport().update(width, height, true);
}
// dispose...
}
public class MySquare extends Actor {
ShapeRenderer renderer = new ShapeRenderer();
@Override
public void draw(Batch batch, float alpha){
batch.end();
renderer.begin(ShapeRenderer.ShapeType.Filled);
renderer.setColor(Color.GREEN);
renderer.rect(0, 0, 50, 50);
renderer.end();
batch.begin();
}
}
不幸的是,并不如预期MySquare.java结果:由于你可以看到,绿色的广场实际上不是一个正方形。此行为是为Windows和Android两个相同的(在横向模式下):
然而,通过LwjglApplicationConfiguration
在DesktopLauncher.java
编程,并明确设置窗口的大小,以有效解决9:16时,绿色方块显示正确。为什么是这样,我怎么能避免这种解决方法(这对Android不起作用)?
谢谢。不幸的是,'Batch'似乎没有一个叫做getCamera的方法。另一方面''ViewPort'确实。猜猜我必须从外面传递它? – ceran
哦,我的意思是getStage()。getCamera()。合并,甚至只是使用batch.getProjectionMatrix() – Tenfour04