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

2024-02-21

我正在开发一个 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);

是否有解决方法可以获取“全屏”实际启动的显示器的高度/宽度?

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

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

Thanks!


我会避免使用Toolkit.getDefaultToolkit()并单独使用lwjgl.util.Display.getAvailableDisplayModes() http://www.lwjgl.org/javadoc/org/lwjgl/util/Display.html#getAvailableDisplayModes%28int,%20int,%20int,%20int,%20int,%20int,%20int,%20int%29或描述的方法libgdx https://code.google.com/p/libgdx/wiki/GraphicsRuntime.

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

If Display.getAvailableDisplayModes() http://www.lwjgl.org/javadoc/org/lwjgl/util/Display.html#getAvailableDisplayModes%28int,%20int,%20int,%20int,%20int,%20int,%20int,%20int%29在不同的执行中更改其排序顺序,只需重新排序并使用最大的可用排序或使用标准排序并提供游戏内设置来更改它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Java EE:如何获取我的应用程序的 URL?

    在 Java EE 中 如何动态检索应用程序的完整 URL 例如 如果 URL 是 localhost 8080 myapplication 我想要一个可以简单地将其作为字符串或其他形式返回给我的方法 我正在运行 GlassFish 作为应
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 多个 Maven 配置文件激活多个 Spring 配置文件

    我想在 Maven 中构建一个环境 在其中我想根据哪些 Maven 配置文件处于活动状态来累积激活多个 spring 配置文件 目前我的 pom xml 的相关部分如下所示
  • 操作错误不会显示在 JSP 上

    我尝试在 Action 类中添加操作错误并将其打印在 JSP 页面上 当发生异常时 它将进入 catch 块并在控制台中打印 插入异常时出错 请联系管理员 在 catch 块中 我添加了它addActionError 我尝试在jsp页面中打
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • 如何修复 JNLP 应用程序中的“缺少代码库、权限和应用程序名称清单属性”?

    随着最近的 Java 更新 许多人都遇到了缺少 Java Web Start 应用程序的问题Codebase Permissions and Application name体现属性 尽管有资源可以帮助您完成此任务 但我找不到任何资源综合的
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O

随机推荐