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
相关产品推荐
相关产品推荐

