我的游戏是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);
但屏幕空白!
答案 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);