Java和libGDX / LWJGL游戏全屏错误大小,适用于Ubuntu上的多个显示器

2022-09-01 07:03:11

我正在开发一个libGDX(LWJGL之上的库)游戏项目,并从几个不同的工作站使用Intellij IDEA IDE:

  • Windows 7 x64笔记本电脑,带两个显示器(1920x1080和1600x1200),nVidia GT540M。
  • Ubuntu 12.04 LTS 在具有单个显示屏 (1366x768) 的笔记本电脑上,Intel 集成显卡。
  • Ubuntu 12.04 LTS,位于具有两个显示器(1920x1080和1280x1024)的桌面上,nVidia GTS 450。

我在Ubuntu盒子上使用OpenJDK for Java 6,在Windows盒子上使用Sun / Oracle Java 6(我听说Java 6是用于Android兼容性的)。

全屏运行时:

  • Windows 7 笔记本电脑:工作正常。
  • Ubuntu 笔记本电脑:工作正常。
  • Ubuntu桌面:背景图像显示放大,只有一部分适合屏幕。+

进一步研究这个问题,我看到对Gdx.graphics.getHeight()和Gdx.graphics.getWidth()的调用返回覆盖两个显示器所需的矩形大小,在我的情况下是3200x1080,但是当我告诉我的游戏全屏运行时,它只使用其中一个显示器,因此摄像机设置为1920x1080,但我的相机移动和平铺认为它们已经使用了3200x1080, 使内容失真且无法使用(因为角色可以离开屏幕向右)。

我猜我的问题实际上来自awt返回的大小。Toolkit的getScreenSize()调用,但我不知道如何更深入地询问它,以获得当我全屏时它实际使用的屏幕大小。

我的桌面启动器获取屏幕大小并设置全屏,如下所示:

    LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration();
    Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize();
    cfg.width = screenDimension.width;
    cfg.height = screenDimension.height;
    cfg.fullscreen = true;
    new LwjglApplication(new Game1(), cfg);

有没有一个解决方法来获取“全屏”实际启动的显示器的高度/宽度?

因此,我看到的麻烦在于,执行游戏.jar文件,退出游戏,然后再次执行,重复执行,导致不同的显示模式显示在Gdx.graphics.getDisplayModes()返回的模式列表中 - 正如P.T.在下面指出的那样,这是围绕LWJGL的薄包装。为什么会发生这种情况?为什么在 Ubuntu 的后续运行中会呈现一组不同的模式?Display.getAvailableDisplayModes()

编辑:根据P.T.的建议,将LWJGL引用放在有问题的地方,因为似乎是LWJGL提供了显示模式列表。

谢谢!


答案 1

我将避免使用和仅使用lwjgl.util.Display.getAvailableDisplayModes()libgdx描述的方法。Toolkit.getDefaultToolkit()

设置全屏窗口后,获取其大小(如果您的设置方法还不知道),然后仅从此处使用此信息。

如果 Display.getAvailableDisplayModes() 在不同的执行上更改了其排序顺序,只需对它们重新排序并使用可用的最大排序,或者使用标准执行并提供游戏内设置来更改它们。


答案 2
GraphicsDevice monitors[]=GraphicsEnvironment.getScreenDevices(); 

Dimension screen_resolution[monitors.length];

for (int monitorID = 0; monitorID < monitors.length; monitorID++)
{
    screen_resolution[monitorID] = new Dimension(monitors[monitorID].getDisplyMode().getWidth(),monitors[monitorID].getDisplyMode().getHeight());
}

推荐