LibGDX DisplayMode上的屏幕尺寸奇怪

时间:2014-03-10 02:27:35

标签: libgdx box2d

我目前正面临LibGDX和Box2d的一些问题,可能是因为我的相机设置。

在调查时,我发现:

    Gdx.graphics.getWidth() == 320
    Gdx.graphics.getHeight() == 526

即使我将舞台和OrthographicCamera设置为1080/1920或270/480(我正在玩这些值)。

然后我按照文档看起来这个值与舞台和相机无关。之后,我检查了我只有一个DisplayMode可用:

    DisplayMode[] dms = Gdx.graphics.getDisplayModes();
    for (int i = 0; i < dms.length; i++) {
        Log.d("myapp", "dms > " + dms[i].toString());
    }

结果:

    dms > 320x526, bpp: 0, hz: 0

因此,我对setDisplayMode的调用被忽略了:

    Gdx.graphics.setDisplayMode(SCREEN_WIDTH, SCREEN_HEIGHT, true);

它什么都没改变。

我怀疑这可能是问题所在,但我怎样才能改变它?

编辑:我正在使用Nexus 5进行测试。

3 个答案:

答案 0 :(得分:2)

Gdx.graphics.getWidth()Gdx.graphics.getHeight()返回屏幕尺寸。在桌面上,它们是窗口的大小(您可以调整大小),但在Android上,您无法更改它们。您应该将摄像机视口大小调整为屏幕大小。

答案 1 :(得分:1)

Gdx.graphics.getWidth()Gdx.graphics.getHeight()是Android设备的屏幕尺寸/桌面的窗口大小。有一种设置视口的方法,因此窗口的其余部分用黑色边框填充:Gdx.gl.glViewport((int)startX, (int)startY, (int)width, (int)height);(来自this tutorial)。

摄像机视口是另一回事。这就像物理尺寸和游戏大小的对话:如果您将摄像机视口宽度设置为(例如)16,则您的游戏窗口将“分成”16个部分。如果你然后在x = 16绘制一个对象,它就在窗口的右端。如果你在x = 7.5上绘制它,它位于中间(如果是size = 1,x pos是左侧)。所以你可以用你自己的单位计算你的东西(也许米?),libgdx将它缩放到适合屏幕的位置。 因此,如果您在16 / 9 px屏幕上使用(1600 * 900)的相机视口(为了简单起见),1 worldunit100 px。在800*450 px屏幕上50px ... 我希望我能帮忙

答案 2 :(得分:1)

其他人给出了有用的答案,但我必须说明为什么LibGDX报告的Nexus 5屏幕尺寸错误。

我发现this link解释说我们需要在AndroidManifest中设置目标SDK:

    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="18" />

将其设置为我的测试版后,LibGDX会为我的设备报告正确的屏幕尺寸(1080x1776,可能是因为菜单占用了一些空间)。