用libGDX和Java 11从零开始,5分钟搞定你的第一个跨平台小游戏(附完整源码)
用libGDX和Java 11快速构建你的第一款跨平台小游戏
周末的午后,阳光透过窗帘洒在键盘上。作为一名Java开发者,你是否曾想过亲手打造一款能在手机和电脑上运行的小游戏?libGDX正是实现这个梦想的绝佳工具。这个轻量级框架让跨平台游戏开发变得像编写普通Java程序一样简单。本文将带你用不到5分钟的时间,完成一个完整的"接水滴"游戏,让你立刻感受到游戏开发的乐趣。
1. 环境准备:零配置快速启动
游戏开发往往从繁琐的环境搭建开始劝退新手,但libGDX只需要两个基础工具:
- JDK 11+:推荐使用 Amazon Corretto 11 或 OpenJDK 11
- Android Studio:不仅是安卓开发工具,更是管理项目依赖的利器( 最新稳定版下载 )
验证安装是否成功:
java -version # 应显示类似:openjdk version "11.0.12"提示:如果已有IntelliJ IDEA,可以直接使用,但Android Studio对移动端调试更友好
2. 项目生成:一键创建多平台工程
libGDX提供的项目生成器让初始化变得极其简单:
- 下载 gdx-setup.jar
- 运行命令:
java -jar gdx-setup.jar- 在图形界面中填写:
- Project name: RainCatcher
- Package: com.yourname.raincatcher
- Game class: RainGame
- 勾选Desktop和Android平台
生成的项目结构如下:
RainCatcher/ ├── android/ # 安卓平台代码 ├── core/ # 共享游戏逻辑 ├── desktop/ # 桌面启动器 └── build.gradle # 多项目构建配置3. 核心代码:实现接水滴游戏逻辑
在core/src/com.yourname.raincatcher/目录下创建RainGame.java:
public class RainGame extends ApplicationAdapter { private OrthographicCamera camera; private SpriteBatch batch; private Texture bucketTexture, dropTexture; private Sound dropSound; private Music rainMusic; private Rectangle bucket; private Array<Rectangle> raindrops; @Override public void create() { // 初始化资源 bucketTexture = new Texture("bucket.png"); dropTexture = new Texture("droplet.png"); dropSound = Gdx.audio.newSound(Gdx.files.internal("drop.wav")); rainMusic = Gdx.audio.newMusic(Gdx.files.internal("rain.mp3")); // 设置相机 camera = new OrthographicCamera(); camera.setToOrtho(false, 800, 480); // 创建水桶 bucket = new Rectangle(); bucket.x = 800/2 - 64/2; bucket.y = 20; bucket.width = 64; bucket.height = 64; // 初始化雨滴数组 raindrops = new Array<>(); spawnRaindrop(); // 播放背景音乐 rainMusic.setLooping(true); rainMusic.play(); } private void spawnRaindrop() { Rectangle raindrop = new Rectangle(); raindrop.x = MathUtils.random(0, 800-64); raindrop.y = 480; raindrop.width = 64; raindrop.height = 64; raindrops.add(raindrop); } }4. 游戏循环:让世界动起来
在RainGame类中添加render方法实现游戏逻辑:
@Override public void render() { // 清屏 ScreenUtils.clear(0, 0, 0.2f, 1); // 更新相机 camera.update(); batch.setProjectionMatrix(camera.combined); // 处理输入 if(Gdx.input.isTouched()) { Vector3 touchPos = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0); camera.unproject(touchPos); bucket.x = touchPos.x - 64/2; } // 移动水桶 if(Gdx.input.isKeyPressed(Keys.LEFT)) bucket.x -= 200 * Gdx.graphics.getDeltaTime(); if(Gdx.input.isKeyPressed(Keys.RIGHT)) bucket.x += 200 * Gdx.graphics.getDeltaTime(); // 边界检查 if(bucket.x < 0) bucket.x = 0; if(bucket.x > 800 - 64) bucket.x = 800 - 64; // 生成新雨滴 if(TimeUtils.nanoTime() - lastDropTime > 1000000000) spawnRaindrop(); // 更新雨滴位置 for(Iterator<Rectangle> iter = raindrops.iterator(); iter.hasNext();) { Rectangle raindrop = iter.next(); raindrop.y -= 200 * Gdx.graphics.getDeltaTime(); if(raindrop.y + 64 < 0) iter.remove(); if(raindrop.overlaps(bucket)) { dropSound.play(); iter.remove(); } } // 渲染场景 batch.begin(); batch.draw(bucketTexture, bucket.x, bucket.y); for(Rectangle raindrop : raindrops) { batch.draw(dropTexture, raindrop.x, raindrop.y); } batch.end(); }5. 资源管理与多平台适配
游戏资源应放在android/assets/目录下,包括:
- bucket.png (64x64像素水桶图片)
- droplet.png (64x64像素水滴图片)
- rain.mp3 (背景雨声)
- drop.wav (接住水滴音效)
桌面启动器(desktop/src/...)配置:
Lwjgl3ApplicationConfiguration config = new Lwjgl3ApplicationConfiguration(); config.setTitle("Rain Catcher"); config.setWindowedMode(800, 480); new Lwjgl3Application(new RainGame(), config);安卓启动器(android/src/...)配置:
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(); config.useAccelerometer = false; config.useCompass = false; initialize(new RainGame(), config);6. 构建与运行:一键测试多平台
在项目根目录运行:
桌面版:
./gradlew desktop:run安卓版(需连接设备或启动模拟器):
./gradlew android:installDebug android:run常见问题:如果安卓构建失败,检查gradle.properties中是否添加: android.useAndroidX=true android.enableJetifier=true
第一次运行可能会花费较长时间下载依赖,后续构建将非常快速。成功运行后,你将看到蓝色背景上有一个可移动的水桶和不断落下的水滴,接住它们会发出清脆的音效。
