2014-08-31 18 views
3

我目前正在使用正视相机。在我进入游戏之前,我想先修正屏幕大小。目前,我的屏幕尺寸已设置为800 x 480.这样可以在其他设备和屏幕尺寸上正常工作吗?现在我所拥有的就是一个闪屏和游戏画面。我需要添加哪些代码才能实现这一点。LibGDX - 如何让我的游戏在所有屏幕分辨率上都能正常工作?

+0

使用像本机avd或genymotion这样的模拟器来跨多个阵列进行测试。没有做过多的libgdx工作,但这就是我通常测试解决方案的方式。 – zgc7009 2014-08-31 01:26:19

+0

看看关于视口的libgdx的维基。我想你会找到更好的解决方案! https://github.com/libgdx/libgdx/wiki/Viewports – BennX 2014-09-01 12:32:39

回答

6

在相机上拥有一个静态宽度是完全可以的,因为它为您的游戏提供了一个可以可靠工作的固定维度。这是有效的,因为相机被用来定义世界坐标,而这些世界坐标并不总是与屏幕坐标一一对应。

您的问题来自固定的相机高度。根据设备屏幕的高宽比,固定高度会导致屏幕拉长或缩短。如果您想考虑不同的长宽比,则需要将显示比例乘以相机高度(当前为480)。您可以通过将高度除以宽度除以高度来获得屏幕比例。这看起来是这样的:

float width = Gdx.graphics.getWidth(); 
float height = Gdx.graphics.getHeight(); 

OrthographicCamera camera = new OrthographicCamera(800, 480 * (height/width)); 

正如BennX在评论中指出,LibGDX推出视窗,让你做很多同样的事情上面,只是以不同的方式。为了达到与上面概述的效果相同的效果,只需使用视口,就可以使用ExtendViewport。它所做的就是将世界的大小保持在一个方向,同时向另一个方向延伸。因此,世界将首先放大以填满屏幕,然后在保持纵横比的同时扩大较短的尺寸。要创建这种类型的视口,它会是这个样子:

OrthographicCamera camera = new OrthographicCamera(800, 480); 
ExtendViewport viewport = new ExtendViewport(800, 480, camera); 

视口上面会有800的最小宽度和480这些值的一个最低高度将是视后的相同被应用,另一个将根据屏幕的高宽比而改变。更窄的屏幕将具有更多的垂直空间,而更宽的屏幕将具有更多的水平空间。有关视口的更多信息,请访问LibGDX wiki页面here

+0

我不认为它是一个很好的解决方案。 Libgdx特别为这个问题实现了Viewports,就像4个月前那样做了所有的事情。 https://github.com/libgdx/libgdx/wiki/Viewports – BennX 2014-09-01 12:35:13

+1

@BennX感谢您的领导。我仍然使用稍微老一点的引擎,它没有视口,所以我不知道这个解决方案。我已经更新了答案以反映这两种解决方案。 – MCeley 2014-09-01 15:48:13

+0

@Mceley我需要将这行代码应用到我的应用程序的每个屏幕上吗? – Dakota 2014-09-02 01:22:31

0

我正在使用下面的方法,它几乎适用于所有屏幕大小与轻微缩放问题。

我总是使用图形图像屏幕尺寸1920.0x1080.0

ScreenViewport screenViewport=new ScreenViewport(camera); 
screenViewport.setUnitsPerPixel(Math.min(1920.0f/Gdx.graphics.getWidth(),1080.0f/Gdx.graphics.getHeight())); 

在这里,你可以从Math.min()或Math.max()设置你的方法。

这将导致您的相机视图端口大小接近1920.0 * 1080.0

Device screen-size Math.max()  Math.max() 
800.0x480.0  1800.0x1080.0 1920.0x1152.0 
1920.0x1080.0  1920.0x1080.0 1920.0x1080.0 
2048.0x1440.0  1536.0x1080.0 1920.0x1350.0 

注:始终使用camera.viewportWidth和camera.viewportHeight对于游戏UI界面的设定位置。