LÖVE 2D 核心助手
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/love2d-core-3ypv 到你的 AI 助手。
技能介绍
要解决的问题
刚搭起来的 LÖVE 项目,画面能出来,但一跑就露馅:方块在高刷新率屏幕上“窜”得更快,低帧率时又慢吞吞;按键偶尔失灵,松开没反应;想在菜单、游戏、暂停之间切来切去,最后 if 条件堆成一团;更隐蔽的是,把 love.conf 写进 main.lua 后窗口标题根本不生效。这些都不是 Lua 语法问题,而是 LÖVE 的入口约定、回调循环和坐标系/颜色空间没对齐。
技能如何工作
这个技能围绕 LÖVE 11.5 的核心骨架展开,流程很直接:
- 确认入口点:游戏跑
main.lua,应定义love.load()(一次性初始化)、love.update(dt)(状态推进)与love.draw()(绘制);窗口和版本配置放进conf.lua,它在模块加载之前执行。 - 固定版本:在
conf.lua里写t.version = "11.5",版本不匹配时 LÖVE 会告警。 - 用 dt 驱动一切运动:所有逐帧位置、计时器、动画都要乘以
dt(秒),否则速度就和帧率绑定。 - 输入分两种:按住不放用轮询
love.keyboard.isDown,单次按下用love.keypressed回调。 - 屏幕状态用小状态栈管理(菜单、游戏、暂停),而不是散落的布尔标志;完整 push/pop 管理器见
references/state-stack.md。 - 跑起来观察:在项目目录执行
love .,亲眼确认窗口、移动速度和输入,再谈“能跑了”。
适用边界与注意点
- 颜色在 LÖVE 11.x 是 0–1 而不是 0–255。
setColor(255,0,0)会被钳成白色;要么写setColor(1,0,0),要么用love.math.colorFromBytes。 - 颜色是全局的,一次
setColor之后所有绘制都会被染色,绘制纯文本/图片前记得love.graphics.setColor(1,1,1)复位。 love.keypressed只在按下和系统重复时触发,松开要用love.keyreleased,并可通过isrepeat忽略长按重复。- 不覆盖:与 LÖVE 无关的 Lua 语言问题;物理(LÖVE 通过 Box2D 的
love.physics,是另一主题);着色器(love.graphics的 GLSL)。跨引擎存档建议看save-systems。
使用场景
- 新建 LÖVE 项目时,需要搭好 main.lua 的回调循环、conf.lua 窗口与版本,并确认 love.load/update/draw 入口。
- 游戏角色移动速度随帧率漂移时,要排查未乘 dt 的逐帧位移,把位置、计时器和动画改为按秒推进。
- 菜单、游戏、暂停界面用一堆 if 标志切换导致逻辑混乱时,需要改用小状态栈管理屏幕状态。
- 画面颜色发白或整体偏色时,要检查 setColor 是否误用 0–255,并在绘制文字、图片前复位颜色。
适合人员
- 刚开始用 Lua 做 LÖVE 游戏的独立开发者,需要先跑通 main.lua 回调循环和 conf.lua 配置。
- 负责小游戏核心玩法的客户端程序员,要处理角色移动随帧率漂移和按键状态错乱。
- 维护 LÖVE 11.x 项目的工程师,需要在升级版本或改配色时排查颜色空间与全局状态问题。
- 把 LÖVE 原型交付给同伴试玩的学生或工作室成员,希望菜单、游戏、暂停切换逻辑清晰可玩。