LibGDX - 如何让我的游戏在所有屏幕分辨率下工作?

时间:2014-08-31 01:04:25

标签: android libgdx

我目前正在使用正交相机。在我进入游戏之前,我想首先修复屏幕尺寸。目前,我的屏幕尺寸设置为800 x 480.这是否适用于其他设备和屏幕尺寸?现在我只有一个闪屏和游戏画面。我需要添加哪些代码才能实现此目的。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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屏幕的位置。