libGDX新手咨询Overlap2D框架状态与屏幕适配问题
关于Overlap2D的两个问题解答
1. Overlap2D是否已被废弃?还能继续用吗?
先给你明确说:Overlap2D的官方开发已经停挺久了——最近的稳定更新要追溯到2018年左右,项目仓库也没有活跃的维护动作。不过这不是说它彻底不能用:你已经把它集成到项目里且能正常运行,如果它能满足你做简单UI的需求,继续用完全没问题,毕竟社区里还有不少老项目在依赖它。
但如果是刚启动的新项目,我更推荐你选当前还在活跃维护的UI方案,比如:
- libGDX官方的Scene2D.ui:配合代码手动布局,用
Table这类组件做适配很灵活; - VisUI:基于Scene2D.ui的扩展,自带更多预制组件和现代样式;
- Tiled:如果侧重场景而非纯UI,它做关卡类场景的适配和libGDX集成得很成熟。
2. 解决水滴不随屏幕尺寸留在角落的问题
从你给的截图和代码来看,问题主要出在元素锚点设置和Viewport与Overlap2D场景的配合上,咱们一步步来解决:
第一步:检查Overlap2D编辑器里的元素锚点
打开你的Overlap2D项目,选中每个水滴:
- 左上角的水滴:把锚点(Anchor)设成Top-Left(左上);
- 右上角的水滴:锚点设成Top-Right(右上);
- 左下角的水滴:锚点设成Bottom-Left(左下);
- 右下角的水滴:锚点设成Bottom-Right(右下);
锚点就是元素的“基准点”,只有把它设成对应角落,屏幕尺寸变化时元素才会跟着角落走。设置完记得重新导出场景文件,替换项目里的旧资源。
第二步:调整代码里的Viewport和相机逻辑
你已经用了ExtendViewport,但可以优化一下代码让适配更准确:
package com.mygdx.game; import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.utils.viewport.ExtendViewport; import com.badlogic.gdx.utils.viewport.Viewport; import com.uwsoft.editor.renderer.SceneLoader; import com.uwsoft.editor.renderer.resources.ResourceManager; public class MyGdxGame extends ApplicationAdapter { private SceneLoader sceneLoader; private ResourceManager rm; private Viewport viewport; private OrthographicCamera camera; @Override public void create () { rm = new ResourceManager(); rm.initAllResources(); camera = new OrthographicCamera(); // 保持和你Overlap2D场景一致的初始尺寸480x800 viewport = new ExtendViewport(480, 800, camera); sceneLoader = new SceneLoader(rm); sceneLoader.loadScene("MainScene", viewport); } @Override public void render () { Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); sceneLoader.getEngine().update(Gdx.graphics.getDeltaTime()); } @Override public void resize(int width, int height) { // 更新视口,第三个参数true让相机保持在屏幕中心(按需调整) viewport.update(width, height, true); // 确保SceneLoader的相机和当前Viewport同步 sceneLoader.getCamera().position.set(camera.position); sceneLoader.getCamera().viewportWidth = camera.viewportWidth; sceneLoader.getCamera().viewportHeight = camera.viewportHeight; } }
额外小提示
- 要是想让界面完全填充屏幕、不在乎比例变形,可以试试
StretchViewport; - 想保持原始比例、屏幕多余部分加黑边的话,
FitViewport会更合适; - 一定要确保Overlap2D编辑器里的场景尺寸(480x800)和代码里Viewport的初始尺寸完全一致,不然容易出现适配偏差。
内容的提问来源于stack exchange,提问作者BossShell
相关产品推荐
相关产品推荐

