我目前正面临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进行测试。答案 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 worldunit
为100 px
。在800*450
px屏幕上50px
...
我希望我能帮忙
答案 2 :(得分:1)
其他人给出了有用的答案,但我必须说明为什么LibGDX报告的Nexus 5屏幕尺寸错误。
我发现this link解释说我们需要在AndroidManifest中设置目标SDK:
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="18" />
将其设置为我的测试版后,LibGDX会为我的设备报告正确的屏幕尺寸(1080x1776,可能是因为菜单占用了一些空间)。