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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:10:17