【问题标题】:How to center window in LibGDX with LWJGL3 after resize调整大小后如何使用 LWJGL3 在 LibGDX 中居中窗口
【发布时间】:2017-10-26 09:09:31
【问题描述】:

我有一个未装饰的窗口需要居中,使用此配置:

Lwjgl3ApplicationConfiguration configuration = Lwjgl3ApplicationConfiguration()
configuration.setIdleFPS(60)
configuration.setBackBufferConfig(8,8,8,8,16,0,0)
configuration.setWindowedMode(1920,1080)
configuration.setTitle("Title")
configuration.setDecorated(false)
configuration.setResizable(false)

稍后,在应用程序中,您可以通过从特定纵横比定义的预设来更改窗口大小。通过此调用进行大小调整:

Gdx.graphics.setWindowedMode(width, height)

这似乎将窗口保持在其原始左上角位置(可以在屏幕上的随机位置),但我希望它位于监视器的中心,或者将窗口移动到任何所需位置的方法随意。

问题: 使用 SetWindowedMode() 更改窗口大小时,如何将 LibGDX 创建的窗口与 LWJGL3Application 保持居中

【问题讨论】:

    标签: java libgdx lwjgl


    【解决方案1】:

    @Tenfour04 在回复下面的旧答案时表示,您可以使用以下方式获取 LWJGL3Window 实例

    Lwjgl3Window window = ((Lwjgl3Graphics)Gdx.graphics).getWindow();
    

    然后,您可以在调整大小事件期间使用它来设置位置

    window.setWindowPos(x, y)
    

    旧答案:

    我通过反思解决了这个问题

    public void setWindowSize(int width, int height) {
      Lwjgl3Application app = (Lwjgl3Application) Gdx.app
      Field windowfield = app.class.getDeclaredField("currentWindow")
      if(windowfield.trySetAccessible()) {
        Lwjgl3Window window = windowfield.get(app)
        Gdx.graphics.setWindowedMode(width, height)
        // Can use context size because of no decorations on window
        window.setWindowPos(Gdx.graphics.width/2 - width/2, Gdx.graphics.height/2 - height/2)
      }
    }
    

    警告:尽管这可行,但这不是一个好的解决方案。类的字段保持私有是有原因的,不将其暴露给 API 意味着它可以在任何更新时更改,给您留下一团糟。

    话虽如此,我正在为像我一样绝望的人发布此解决方案,因为我不确定是否还有其他合适的解决方案。不过,我会热切地等待更好的解决方案。

    【讨论】:

    • 使用反射并不危险。这不是操作系统 API,因此除非您更新到更改它的 LibGDX 版本,否则它不会中断。无论如何,您可以获得没有反射的窗口。使用 ((Lwjgl3Graphics)Gdx.graphics).getWindow();
    • @Tenfour04 ,我从来没有说过它不是一个好的解决方案是危险的,因为您使用的是 LibGDX 的开发人员从未打算让您使用的 API,因此可能会随心所欲地改变。您要么阻止自己升级到第三方库的新版本(并且缺少错误修复),要么预计将来很难找到错误。
    • @Tenfour04 试过你的解决方案,效果很好,谢谢!如果你把它变成一个解决方案,我会接受它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 2011-04-05
    • 2012-05-20
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    相关资源
    最近更新 更多