You need to enable JavaScript to run this app. LibGDX设置窗口模式分辨率报错 自定义100×100尺寸窗口崩溃如何解决
优惠活动
大模型
产品
解决方案
定价
更多

LibGDX设置窗口模式分辨率报错 自定义100×100尺寸窗口崩溃如何解决

问题原因

你代码的逻辑顺序和参数硬编码是崩溃的核心诱因:

  • 你先硬编码创建了视口为100x100的透视相机,之后才调用Gdx.graphics.setWindowedMode修改窗口尺寸,修改后没有同步更新相机的视口参数,导致相机投影矩阵和实际窗口尺寸不匹配,触发渲染逻辑异常。
  • 部分桌面操作系统对窗口最小尺寸有限制,100x100可能小于系统允许的最小窗口阈值(比如包含标题栏、边框的窗口最小高度可能超过100px),直接设置过小尺寸会触发底层窗口系统报错。
  • 没有监听窗口尺寸变化事件,后续如果手动缩放窗口也会出现同类崩溃问题。

修复方案

1. 调整窗口设置逻辑顺序

优先在启动器配置阶段设置窗口尺寸,不要在create方法里动态修改初始窗口大小,桌面端启动类配置示例:

Lwjgl3ApplicationConfiguration config = new Lwjgl3ApplicationConfiguration();
config.setWindowedMode(100, 100);
// 显式配置允许的最小窗口尺寸,规避系统限制报错
config.setWindowSizeLimits(100, 100, 9999, 9999);
new Lwjgl3Application(new YourGame主类(), config);

如果一定要在create里修改尺寸,要先改窗口尺寸,再初始化相机,不要硬编码相机宽高,直接读取当前实际窗口尺寸赋值:

@Override
public void create () {
    // 先修改窗口尺寸
    Gdx.graphics.setWindowedMode(100, 100);
    // 再用当前窗口实际宽高初始化相机
    cam = new PerspectiveCamera(70, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    cam.lookAt(0f,0f,0f);
    cam.near = 0.1f;
    cam.far = 64f;
    // 原有后续逻辑不变
    player = new Player(cam);
    // ... 剩余代码
}

2. 监听窗口尺寸变化同步参数

重写resize方法,窗口大小变化时自动更新相机视口,避免后续缩放窗口崩溃:

@Override
public void resize(int width, int height) {
    // 过滤宽高为0的异常场景
    if (width == 0 || height == 0) return;
    cam.viewportWidth = width;
    cam.viewportHeight = height;
    cam.update();
}

3. 兜底兼容

如果设置100x100仍有崩溃,可适当提高最小窗口阈值(比如150x150),避开部分操作系统的最小窗口限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 16:54:03