繁体   English   中英

调整大小后如何使用LWJGL3将LibGDX中的窗口居中

[英]How to center window in LibGDX with LWJGL3 after resize

使用以下配置,我有一个需要居中的未修饰窗口:

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创建的窗口居中

@ 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意味着它可以在任何更新时更改,从而使您一团糟。

话虽这么说,但我将这个解决方案发布给像我这样绝望的人们,因为我不确定还有其他合适的解决方案。 我将热切等待更好的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM