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

报错:com.badlogic.gdx.backends.lwjgl包不存在,跨类调用getDesktopDisplayMode()失败

解决LibGDX中跨平台模块调用后端API的问题

嗨,这个问题其实是LibGDX跨平台架构下的典型模块职责问题,我来帮你理清楚:

为什么会报错?

你的MainMenuScreen应该是在core模块里(LibGDX的核心跨平台代码模块),而com.badlogic.gdx.backends.lwjgl包属于desktop平台专属模块的依赖。core模块的设计目标是兼容所有平台(Android、iOS、Desktop等),所以它不会包含任何平台特定的库依赖,直接导入后端包自然会提示“包不存在”。

推荐解决方案:用接口解耦平台代码(符合LibGDX设计理念)

这种方式既能拿到Desktop的显示尺寸,又不会破坏跨平台特性:

  1. 在core模块创建一个平台无关的接口
// core/src/[你的包名]/DisplayInfoProvider.java
public interface DisplayInfoProvider {
    int getDesktopDisplayWidth();
    int getDesktopDisplayHeight();
}
  1. 在desktop模块的DesktopLauncher里实现这个接口
// desktop/src/[你的包名]/DesktopDisplayInfoProvider.java
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;

public class DesktopDisplayInfoProvider implements DisplayInfoProvider {
    @Override
    public int getDesktopDisplayWidth() {
        return LwjglApplicationConfiguration.getDesktopDisplayMode().width;
    }

    @Override
    public int getDesktopDisplayHeight() {
        return LwjglApplicationConfiguration.getDesktopDisplayMode().height;
    }
}
  1. 在DesktopLauncher启动游戏时,把这个实现类传递给core的游戏入口
// desktop/src/[你的包名]/DesktopLauncher.java
public class DesktopLauncher {
    public static void main (String[] arg) {
        LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
        // 传递平台实现给核心游戏类
        DisplayInfoProvider displayProvider = new DesktopDisplayInfoProvider();
        new LwjglApplication(new MainGame(displayProvider), config);
    }
}
  1. 在core的MainGame里保存这个接口实例,供MainMenuScreen调用
// core/src/[你的包名]/MainGame.java
public class MainGame extends ApplicationAdapter {
    private DisplayInfoProvider displayInfoProvider;

    public MainGame(DisplayInfoProvider displayInfoProvider) {
        this.displayInfoProvider = displayInfoProvider;
    }

    @Override
    public void create() {
        // 初始化MainMenuScreen时传入provider
        setScreen(new MainMenuScreen(displayInfoProvider));
    }
}
  1. 最后在MainMenuScreen里使用这个接口获取尺寸
// core/src/[你的包名]/MainMenuScreen.java
public class MainMenuScreen extends ApplicationAdapter {
    private DisplayInfoProvider displayInfoProvider;

    public MainMenuScreen(DisplayInfoProvider displayInfoProvider) {
        this.displayInfoProvider = displayInfoProvider;
    }

    @Override
    public void show() {
        int screenWidth = displayInfoProvider.getDesktopDisplayWidth();
        int screenHeight = displayInfoProvider.getDesktopDisplayHeight();
        // 这里就可以正常使用尺寸了
    }
}

简化方案:用LibGDX跨平台API获取显示模式

如果你只是想获取当前运行平台的显示模式,其实LibGDX已经提供了跨平台的API,不需要依赖后端类:

// 在MainMenuScreen里直接调用
int currentWidth = Gdx.graphics.getDisplayMode().width;
int currentHeight = Gdx.graphics.getDisplayMode().height;

这个方法在所有平台都能正常工作,除非你明确需要获取Desktop系统的原生显示模式(比如还没启动游戏窗口时的尺寸),否则这个方案更简单。

额外提醒

确保你的项目模块职责清晰:

  • core模块只包含跨平台通用代码,不要引入任何平台特定依赖
  • desktop/android/ios等模块只负责各自平台的启动和平台特定逻辑,再通过接口传递给core模块

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 23:22:38