调整大小后如何使用 LWJGL3 在 LibGDX 中居中 window
How to center window in LibGDX with LWJGL3 after resize
我有一个未修饰的 window 需要居中,使用此配置:
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)
稍后,在应用程序中,您可以通过选项更改 window 的大小,并使用根据特定纵横比定义的预设。调整大小是通过此调用进行的:
Gdx.graphics.setWindowedMode(width, height)
这似乎将 window 保持在其原始左上角位置(可以在屏幕上的随机位置),但我希望它在显示器上居中,或者以某种方式移动window 随意移动到任何想要的位置。
问题:
在使用 SetWindowedMode()
更改 window 大小时,如何使 LibGDX 使用 LWJGL3Application 创建的 window 居中
@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)
}
}
警告:尽管这可行,但这不是一个好的解决方案。 class 的字段出于某种原因保持私有并且不将其暴露给 API 意味着它可以在任何更新时更改,让您一团糟。
也就是说,我发布这个解决方案是为了像我一样绝望的人,因为我不确定是否还有其他合适的解决方案。不过,我会热切等待更好的解决方案。
我有一个未修饰的 window 需要居中,使用此配置:
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)
稍后,在应用程序中,您可以通过选项更改 window 的大小,并使用根据特定纵横比定义的预设。调整大小是通过此调用进行的:
Gdx.graphics.setWindowedMode(width, height)
这似乎将 window 保持在其原始左上角位置(可以在屏幕上的随机位置),但我希望它在显示器上居中,或者以某种方式移动window 随意移动到任何想要的位置。
问题: 在使用 SetWindowedMode()
更改 window 大小时,如何使 LibGDX 使用 LWJGL3Application 创建的 window 居中@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)
}
}
警告:尽管这可行,但这不是一个好的解决方案。 class 的字段出于某种原因保持私有并且不将其暴露给 API 意味着它可以在任何更新时更改,让您一团糟。
也就是说,我发布这个解决方案是为了像我一样绝望的人,因为我不确定是否还有其他合适的解决方案。不过,我会热切等待更好的解决方案。