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
首页需填写项目名称、包路径和主类名。我们将主类命名为 StarField。
3.1. 选择目标平台
点击 Project Options 进入平台选择页。CORE 模块默认选中,包含共享游戏逻辑。
网页端(HTML)默认启用,我们额外勾选 Android、iOS 和桌面端:
在 LANGUAGE 区可切换 Kotlin/Scala/Groovy 等语言。通过 Extensions 框的加号可添加物理引擎、控制器等官方扩展。
3.2. 第三方扩展
此处可集成社区开发的扩展增强游戏功能。
3.3. 配置 Java 版本
最后一步设置项目路径和 Android SDK 路径,并选择 libGDX 版本和 Java 版本:
⚠️ Java 版本选择直接影响跨平台支持:
- Java 8:全平台支持,兼容旧版 Android/iOS
- Java 7:仅支持旧版移动平台
- Java 11:仅支持桌面端和网页端
- Java 22:仅支持桌面端
点击生成按钮,项目文件将输出到指定目录。
4. 导入 IDE
libGDX 使用 Gradle 构建管理。在 Eclipse、IntelliJ 或 VSCode 中打开含 build.gradle 的项目目录即可导入。导入后目录结构如下:
- core 目录:共享游戏逻辑
- 平台特定目录:html、android、ios、lwjgl3 提供各平台后端
- 桌面端基于 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();
}
关键步骤:
- 设置黑色背景
- 清空屏幕
- 以
Line
模式开始绘制 - 设置颜色并绘制线条(参数为起点/终点坐标)
- 结束绘制
释放资源:
@Override
public void dispose() {
shapeRenderer.dispose();
}
运行桌面端:打开 lwjgl3/src/main/java/com/baeldung/game/lwjgl3/Lwjgl3Launcher.java 并执行。效果:
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));
}
}
逻辑:
- 计算屏幕尺寸
- 根据密度计算星星数量
- 生成随机坐标并存入数组
在 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
- 遍历坐标数组绘制绿色点
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 获取。