扩展视口

时间:2014-12-21 09:54:17

标签: libgdx

我的游戏是200 x 320像素,我想将其缩放以适应任何屏幕。问题是我需要以这些尺寸的整数倍来扩展它,这样放大的像素看起来不均匀。

我应该在构造函数中使用render()resize()方法来实现此目的?

在构造函数中,我现在有:

camera = new OrthographicCamera();
camera.setToOrtho(false,200,320);
stage = new Stage(new ScalingViewport(Scaling.fill,200,320, camera));

render()

camera.update();
game.batch.setProjectionMatrix(camera.combined);

resize()

int widthScale = width/200;
int heightScale = height/320;
int newScale = Math.max(widthScale, heightScale);
int multiplesWidth = newScale*200;
int multiplesHeight = newScale*320;     
stage.getViewport().update(multiplesWidth, multiplesHeight, true);
camera.setToOrtho(false, 200, 320);

我的问题是内容不是居中的。如何以及在哪里可以将屏幕上的内容居中?我尝试过:

camera.position.set(Gdx.graphics.getWidth()/2f, Gdx.graphics.getHeight()/2f, 0);

但屏幕空白!

1 个答案:

答案 0 :(得分:1)

我认为问题在于您尝试使用屏幕尺寸而不是世界尺寸来居中屏幕。

尝试替换

camera.position.set(Gdx.graphics.getWidth()/2f, Gdx.graphics.getHeight()/2f, 0);

camera.position.set(stage.getViewport().getWorldWidth()/2f, stage.getViewport().getWorldHeight()/2f, 0);

编辑:

好的,这里有一个解释为什么我建议你将相机设置为(width/2, height/2)。 (从现在开始,我将省略第三个z-Coordinate,因为它始终为0.)

camera.position.set()设置相机的中心点。在(0,0),相机位于屏幕中央,由下面的红色矩形表示。默认情况下libgdx的作用是什么,以及我建议通过width/2(蓝线)和height/2(绿线)转换为品红色矩形来抵消相机。

旁注:camera.position.set(Gdx.graphics.getWidth()/2f, Gdx.graphics.getHeight()/2f, 0);无效的原因是因为Gdx.graphics.getX()以像素为单位返回窗口的宽度和高度,而不是Viewport使用的测量系统。这使得相机向上和向右偏移约一米,在那里你显然没有画任何东西。

如果您想将红色矩形作为相机,则可以更改

的最后一个参数
stage.getViewport().update(multiplesWidth, multiplesHeight, true);

false。或者使用camera.position.set(0,0,0);

libgdx camera's