如何开始用 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 是游戏循环的核心:前者负责逻辑,后者负责渲染。

验证与常见卡点

跑通第一个程序后,可以用这几个方法确认环境正常:

  1. 修改 love.graphics.print 的坐标或文字,重新打开,画面应随之变化。
  2. 在 love.update 里打印 dt,确认循环在持续运行。
  3. 故意写错一个函数名,看 LÖVE 是否弹出错误提示——它的报错界面会直接显示出错行。

常见卡点:

  • 窗口一闪而过或报错:多半是 main.lua 不在项目文件夹根目录,或文件名拼写不对。
  • 图片/声音加载失败:检查文件路径是否相对于项目文件夹,以及文件名大小写是否一致。
  • 画面不动:确认绘制逻辑写在 love.draw 里,而不是 love.load 里——love.load 只运行一次。

接下来去哪里深入

官网的 wiki 上有更多教程,覆盖图形、音频、输入、物理等主题。如果卡住了,官方论坛有很多人愿意帮忙,也可以在上面看到别人发布的游戏和项目,了解 LÖVE 实际能做成什么样。此外还有 Discord 服务器和 subreddit 两个社区入口。

一个务实的路径是:先把上面三个代码片段都跑一遍,再挑一个 wiki 教程跟着做,遇到问题带着具体报错去论坛或 Discord 提问。

love2d.org