java和libGDX/LWJGL游戏Ubuntu上多个显示器的全屏尺寸错误

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

  • 带有两个显示器(1920×1080和1600×1200)的Windows 7 x64笔记本电脑,nVidia GT540M
  • Ubuntu12.04 LTS安装在一台笔记本电脑上,带有单显示器(1366×768),英特尔集成图形
  • Ubuntu12.04 LTS在带有两个显示器(1920×1080和1280×1024)的桌面上,nVidia GTS 450

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

全屏运行时:

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

进一步研究,我发现对Gdx.graphics.getHeight()和Gdx.graphics.getWidth()的调用返回覆盖两个显示器所需的矩形大小,在我的例子中是3200×1080,但当我告诉我的游戏运行全屏时,它只使用其中一个显示器,所以相机设置为1920×1080,但我的相机移动和平铺地图平移认为他们需要处理3200×1080,这使得事情变得扭曲和不可用(因为角色可以从屏幕右侧走出来)

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

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

lwjglaplicationconfiguration cfg=new lwjglaplicationconfiguration();
维度screenDimension=Toolkit.getDefaultToolkit().getScreenSize();
cfg.width=屏幕尺寸.width;
cfg.height=屏幕尺寸.height;
cfg.fullscreen=true;
新LwjglApplication(新游戏1(),cfg);

是否有办法获得“全屏”实际进入的显示器的高度/宽度

所以我看到的问题是,执行game.jar文件,退出游戏,然后再次重复执行,会导致不同的显示模式出现在Gdx.graphics.getDisplayModes()返回的模式列表中——正如p.T.在下面指出的,这是LWJGL的display.getAvailableDisplayModes()的薄薄包装。为什么会这样?为什么在Ubuntu的后续运行中会出现一组不同的模式

编辑:根据p.T.的建议,对LWJGL引用提出质疑,因为似乎是LWJGL提供了显示模式列表

谢谢

我会避免使用Toolkit.getDefaultToolkit(),而只使用lwjgl.util.Display.getAvailableDisplayModes()或libgdx描述的方法

一旦你设置了一个全屏窗口,获取它的大小(如果你的设置方法还不知道的话),并且只使用上面的信息

如果Display.getAvailableDisplayModes()更改其在不同执行时的排序顺序,只需重新排序并使用可用的最大排序或使用标准排序并提供游戏内设置即可进行更改

发表评论