You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LibGDX调用setWindowedMode后如何避免窗口自动居中或重定位?

解决LibGDX调用setWindowedMode后窗口自动居中的问题

调用setWindowedMode()时LibGDX会自动将窗口居中,要避免这个问题,核心就是先记录原窗口位置,修改尺寸后立刻强制把窗口放回原位,具体实现如下:

步骤与代码示例

在你的resize()方法中按以下逻辑处理:

  1. 先获取当前窗口的坐标位置
  2. 计算符合目标宽高比的新尺寸
  3. 修改窗口尺寸(此时窗口会被自动居中)
  4. 立刻将窗口定位回原来的位置
@Override
public void resize(int width, int height) {
    // 记录当前窗口的左上角坐标
    int[] windowPos = new int[2];
    ((Lwjgl3Application) Gdx.app).getWindow().getPosition(windowPos);
    int originalX = windowPos[0];
    int originalY = windowPos[1];

    // 计算保持目标宽高比的新尺寸(这里以你初始化的1900:980为例)
    float targetAspectRatio = 1900f / 980f;
    float currentAspect = (float) width / height;
    int newWidth = width;
    int newHeight = height;

    if (currentAspect > targetAspectRatio) {
        // 宽度超出比例,按高度计算适配后的宽度
        newWidth = (int) (height * targetAspectRatio);
    } else if (currentAspect < targetAspectRatio) {
        // 高度超出比例,按宽度计算适配后的高度
        newHeight = (int) (width / targetAspectRatio);
    }

    // 修改窗口尺寸(此时LibGDX会自动居中窗口)
    ((Lwjgl3Application) Gdx.app).getWindow().setWindowedMode(newWidth, newHeight);

    // 强制将窗口放回原位置
    ((Lwjgl3Application) Gdx.app).getWindow().setWindowPosition(originalX, originalY);
}

注意事项

  • 调用setWindowedMode()后要马上执行setWindowPosition(),避免窗口短暂居中的视觉闪烁(实际测试中几乎察觉不到)
  • getPosition()获取的是窗口边框左上角的坐标,setWindowPosition()也是基于这个位置设置,不需要额外调整边框偏移
  • 确保计算出的新尺寸符合你初始化时设置的窗口大小限制(config.setWindowSizeLimits(400, 400, 1900, 980)),避免尺寸超出限制导致无效修改

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 04:00:02