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

Sha*_*had 35 java linux multiple-monitors lwjgl libgdx

我正在开发一个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()调用返回的大小,但我不知道如何更深入地询问它以获得当我全屏时实际使用的屏幕大小.

我的DesktopStarter获取屏幕大小并设置全屏,如下所示:

    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);
Run Code Online (Sandbox Code Playgroud)

是否有解决方案来获得"全屏"实际启动的显示器的高度/宽度?

所以我遇到的麻烦就是执行game.jar文件,退出游戏,然后重复执行,导致Gdx.graphics.getDisplayModes()返回的模式列表中显示不同的显示模式 - 正如PT在下面指出的那样,这是一个围绕LWJGL的薄包装Display.getAvailableDisplayModes().为什么会这样?为什么在Ubuntu的后续运行中会出现一组不同的模式?

编辑:根据PT的建议,将LWJGL引用置于问题,因为它似乎是LWJGL提供的显示模式列表.

谢谢!

Bil*_*ath 0

您可以用来javafx.stage.screen解决此问题,但如果您坚持使用 Java 6,则必须添加 JavaFX,或者升级到 Java 7(它包含在 Java 7 SDK 中。)

从文档中:

“描述图形目标(例如监视器)的特征。在桌面区域可以跨越多个物理屏幕设备的虚拟设备多屏幕环境中,Screen 对象的边界是相对于 Screen.primary 的。

例如:

Rectangle2D PrimaryScreenBounds = Screen.getPrimary().getVisualBounds();

//将舞台边界设置为主屏幕的可见边界 stage.setX(primaryScreenBounds.getMinX()); stage.setY(primaryScreenBounds.getMinY()); stage.setWidth(primaryScreenBounds.getWidth()); stage.setHeight(primaryScreenBounds.getHeight());

舞台.show();"

还有多种其他方法(getBounds(), getDpi(), getScreens()等)也可能对您非常有用。