我有一个需要居中的未修饰窗口,使用此配置:
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)
稍后,在app中,通过选项,您可以使用从特定宽高比定义的预设更改窗口大小。调整大小是通过以下调用进行的:
Gdx.graphics.setWindowedMode(width, height)
这似乎使窗口保持在其原始的左上角位置(可以在屏幕上的随机位置),但我希望它在显示器上居中,或者将窗口移动到任何所需位置的方式随意。
问题: 使用SetWindowedMode()
更改窗口大小时,如何保持LibGDX创建的窗口和LWJGL3Application居中答案 0 :(得分:2)
@ 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意味着它可以在任何更新时更改,从而使您陷入混乱。
话虽这么说,我正在为像我这样绝望的人发布这个解决方案,因为我不确定还有另一个合适的解决方案。我会急切地等待一个更好的解决方案。