如何开始用 LÖVE 写第一个 2D 游戏程序?
LÖVE 是一个用 Lua 编写 2D 游戏的免费开源框架,支持 Windows、macOS、Linux、Android 和 iOS。开始使用只需要两步:从官网下载对应平台的 LÖVE 11.5,然后写一个包含 love.load、love.draw 等回调函数的 main.lua 文件,用 LÖVE 打开它就能看到画面。适合想用轻量脚本语言快速做 2D 原型、小游戏或参与 game jam 的人。
先确认它是否适合你
LÖVE 的定位是 2D 游戏框架,不是完整的可视化编辑器。它用 Lua 作为唯一脚本语言,代码即项目。官网明确说明它被用于商业项目、game jam、原型开发等各种场景,采用 zlib/libpng 许可证,可以免费用于商业用途且没有限制。
如果你符合下面这些情况,LÖVE 会比较顺手:
- 愿意直接写代码,而不是拖拽组件
- 做 2D 游戏,不需要 3D 引擎能力
- 希望项目轻量、启动快、跨平台
- 想用 Lua 这种语法简单的语言入门游戏开发
如果你需要可视化关卡编辑器、内置物理编辑器或大量现成商业插件,LÖVE 本身不提供这些,需要自己搭配第三方库。
第一步:下载并安装 LÖVE 11.5
官网当前提供的是 LÖVE 11.5,各平台下载方式如下:
| 平台 | 下载选项 |
|---|---|
| Windows Vista+ | 64 位安装包、64 位压缩包、32 位安装包、32 位压缩包 |
| macOS 10.11+ | 64 位压缩包 |
| Linux | Ubuntu PPA、AppImage x86_64 |
| Android | APK |
| iOS | 需从源码 / 库构建 |
安装完成后,你会得到一个可执行程序。它的用法是:把一个包含 main.lua 的文件夹(或 .love 打包文件)拖到它上面,或者用命令行运行。
第二步:写第一个程序
新建一个文件夹,在里面创建 main.lua,写入下面这段绘制文字的最简代码:
function love.draw()
love.graphics.print("Hello World!", 400, 300)
end
然后用 LÖVE 打开这个文件夹。预期结果是:出现一个窗口,在坐标 (400, 300) 的位置显示 “Hello World!”。
这里的关键是 love.draw 回调:LÖVE 会持续调用它来重绘画面。你不需要自己写主循环,框架已经处理好了。
第三步:加载资源和处理初始化
绘制图片和播放声音都需要先加载资源,这类一次性准备工作放在 love.load 里:
function love.load()
whale = love.graphics.newImage("whale.png")
sound = love.audio.newSource("music.ogg", "stream")
love.audio.play(sound)
end
function love.draw()
love.graphics.draw(whale, 300, 200)
end
love.load只在启动时运行一次,适合加载图片、音频、初始化变量。love.graphics.newImage读取图片文件,路径相对于项目文件夹。love.audio.newSource创建音频源,第二个参数"stream"表示流式播放,适合较长的音乐。love.graphics.draw在love.draw中把图片画到指定坐标。
预期结果是:窗口显示 whale.png,同时播放 music.ogg。
常用回调函数速查
LÖVE 的代码结构围绕一组约定命名的回调函数展开,你按需实现即可:
| 回调 | 触发时机 | 典型用途 |
|---|---|---|
love.load |
启动时一次 | 加载资源、初始化状态 |
love.update(dt) |
每帧 | 更新位置、物理、计时,dt 是距上一帧的秒数 |
love.draw |
每帧 | 绘制画面 |
love.keypressed(key) |
按键按下 | 处理键盘输入 |
love.mousepressed(x, y, button) |
鼠标按下 | 处理鼠标输入 |
love.update 和 love.draw 是游戏循环的核心:前者负责逻辑,后者负责渲染。
验证与常见卡点
跑通第一个程序后,可以用这几个方法确认环境正常:
- 修改
love.graphics.print的坐标或文字,重新打开,画面应随之变化。 - 在
love.update里打印dt,确认循环在持续运行。 - 故意写错一个函数名,看 LÖVE 是否弹出错误提示——它的报错界面会直接显示出错行。
常见卡点:
- 窗口一闪而过或报错:多半是
main.lua不在项目文件夹根目录,或文件名拼写不对。 - 图片/声音加载失败:检查文件路径是否相对于项目文件夹,以及文件名大小写是否一致。
- 画面不动:确认绘制逻辑写在
love.draw里,而不是love.load里——love.load只运行一次。
接下来去哪里深入
官网的 wiki 上有更多教程,覆盖图形、音频、输入、物理等主题。如果卡住了,官方论坛有很多人愿意帮忙,也可以在上面看到别人发布的游戏和项目,了解 LÖVE 实际能做成什么样。此外还有 Discord 服务器和 subreddit 两个社区入口。
一个务实的路径是:先把上面三个代码片段都跑一遍,再挑一个 wiki 教程跟着做,遇到问题带着具体报错去论坛或 Discord 提问。