1. 概述

Java 长期以来都是游戏开发的热门选择,经典案例包括《我的世界》初代版。

不使用游戏库或引擎从头开发游戏相当繁琐。libGDX 是一个 Java 游戏开发框架,极大简化了跨平台 2D/3D 游戏的开发流程

本教程将带你探索 libGDX 的核心概念,学习如何创建项目、导入 IDE 以及部署游戏应用。

2. libGDX 框架解析

libGDX 允许我们用 Java 编写一次代码,多平台运行。通过统一代码库,可编译支持桌面端、Android、iOS、Linux 和网页端。这种跨平台能力使其成为独立开发者的理想选择。

libGDX 封装了图形、音频、网络等底层操作,自动适配不同平台。底层使用 OpenGL 与 GPU 通信完成渲染。

此外,框架不强制特定编码范式,开发者可自由设计游戏架构。

3. 创建 libGDX 项目

首先下载 gdx-liftoff 工具,这是一个生成项目结构的独立 JAR 应用。只需系统安装 Java 运行环境(JRE) 即可运行。

双击 JAR 文件启动,或通过终端运行

$ java -jar gdx-liftoff-1.12.1.17.jar

启动后出现项目配置界面: libgdx 项目创建界面

首页需填写项目名称、包路径和主类名。我们将主类命名为 StarField

3.1. 选择目标平台

点击 Project Options 进入平台选择页。CORE 模块默认选中,包含共享游戏逻辑。

网页端(HTML)默认启用,我们额外勾选 Android、iOS 和桌面端: libgdx 平台支持

LANGUAGE 区可切换 Kotlin/Scala/Groovy 等语言。通过 Extensions 框的加号可添加物理引擎、控制器等官方扩展。

3.2. 第三方扩展

点击下一步查看第三方扩展库: libgdx 第三方扩展

此处可集成社区开发的扩展增强游戏功能。

3.3. 配置 Java 版本

最后一步设置项目路径和 Android SDK 路径,并选择 libGDX 版本和 Java 版本:

⚠️ Java 版本选择直接影响跨平台支持

  • Java 8:全平台支持,兼容旧版 Android/iOS
  • Java 7:仅支持旧版移动平台
  • Java 11:仅支持桌面端和网页端
  • Java 22:仅支持桌面端

点击生成按钮,项目文件将输出到指定目录。

4. 导入 IDE

libGDX 使用 Gradle 构建管理。在 EclipseIntelliJVSCode 中打开含 build.gradle 的项目目录即可导入。导入后目录结构如下: libgdx 项目目录

  • core 目录:共享游戏逻辑
  • 平台特定目录:htmlandroidioslwjgl3 提供各平台后端
  • 桌面端基于 LWJGL 实现,提供 OpenGL 绑定

创建时指定的主类 StarField 自动生成在 core/src,继承 ApplicationAdapter 接口:

public class StarField extends ApplicationAdapter {
    // ...
}

核心生命周期方法:

  • create():游戏启动时调用,执行资源分配和初始化
  • resize():屏幕尺寸变化时触发
  • render():游戏主循环,默认每秒调用 60 次,避免在此分配资源
  • dispose():销毁 create() 中创建的对象,提升性能(GC 回收可能延迟)

5. libGDX 实战演示

通过创建星空效果演示 libGDX 功能。先清空 StarField 类的默认代码。

5.1. 绘制线条

使用 ShapeRenderer 绘制图形。StarField 类中创建 ShapeRenderer 对象

private ShapeRenderer shapeRenderer;

@Override
public void create() {
    shapeRenderer = new ShapeRenderer();
}

render() 方法中绘制两条线:

@Override
public void render() {
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    shapeRenderer.begin(ShapeRenderer.ShapeType.Line);
    shapeRenderer.setColor(Color.WHITE);
    shapeRenderer.line(0, 100, 110, 100);
    shapeRenderer.setColor(Color.RED);
    shapeRenderer.line(20, 0, 110, 100);
    shapeRenderer.end();
}

关键步骤:

  1. 设置黑色背景
  2. 清空屏幕
  3. Line 模式开始绘制
  4. 设置颜色并绘制线条(参数为起点/终点坐标)
  5. 结束绘制

释放资源:

@Override
public void dispose() {
    shapeRenderer.dispose();
}

运行桌面端:打开 lwjgl3/src/main/java/com/baeldung/game/lwjgl3/Lwjgl3Launcher.java 并执行。效果: libgdx 线条绘制

5.2. 绘制星空

通过随机点创建星空效果。定义字段:

private static final float STAR_DENSITY = 0.05f;
Array<Vector2> stars;
  • STAR_DENSITY:星星密度(屏幕覆盖比例)
  • stars:存储星星坐标的 Vector2 数组

初始化星星位置:

void initStars(float density){
    int screenWidth = Gdx.graphics.getWidth();
    int screenHeight = Gdx.graphics.getHeight();
    int starCount = (int)(screenHeight * screenWidth * density);
    stars = new Array<Vector2>(starCount);
    Random random = new Random();
    for (int i = 0; i < starCount; i++){
        int x = random.nextInt(screenWidth);
        int y = random.nextInt(screenHeight);
        stars.add(new Vector2(x, y));
    }
}

逻辑:

  1. 计算屏幕尺寸
  2. 根据密度计算星星数量
  3. 生成随机坐标并存入数组

create() 中调用:

@Override
public void create() {
    shapeRenderer = new ShapeRenderer();
    initStars(STAR_DENSITY);
}

render() 中绘制点:

@Override
public void render() {
    // ... 背景设置代码
    shapeRenderer.begin(ShapeRenderer.ShapeType.Point);
    for (Vector2 star : stars){
        shapeRenderer.point(star.x, star.y, 0);
        shapeRenderer.setColor(0,1,0,1);
    }
    shapeRenderer.end();
}

关键变化:

  • 形状类型改为 Point
  • 遍历坐标数组绘制绿色点

效果: libgdx 星空效果

6. 应用部署

所有平台部署均需对应后端模块存在(本例已包含全平台)。

6.1. 部署到网页端

$ ./gradlew html:dist

生成文件位于 target/dist,可通过 Web 服务器在浏览器中测试。

6.2. 部署到桌面端

$ ./gradlew lwjgl3:dist

lwjgl3/dist 生成可运行 JAR,支持 Linux/Mac/Windows。

6.3. 部署到 Android 端

$ ./gradlew android:assembleRelease

❌ 需安装 Android SDK。APK 文件生成于 android/build/outputs/apk,发布前需签名。

6.4. 部署到 iOS 端

$ ./gradlew ios:createIPA

IPA 文件生成于 ios/build/robovm。发布到 App Store 需在 ios/build.gradle 配置证书和配置文件。

⚠️ iOS 编译必须使用 macOS 系统

7. 总结

本文介绍了 libGDX 框架的核心概念,演示了:

  • 使用 gdx-liftoff 创建项目
  • 导入 IDE 开发环境
  • 绘制基础图形和星空效果
  • 多平台部署方案

完整示例代码可在 GitHub 获取。


原始标题:Introduction to libGDX | Baeldung