简单游戏中的定时器与帧规则
来源:lynn.github.io — 2026-07-30
📋 概述
作者在阅读《超级马里奥兄弟》反汇编代码时发现,其事件调度机制与自己在 PICO-8 游戏开发中使用的 Lua 定时器方案惊人相似。两者都使用简单的倒计时表——Lua 端仅需两行代码。文章还揭示了著名的帧规则(frame rule)的起源:由于 NES 上慢速定时器每 21 帧才滴答一次,关卡结束动画与 IntervalTimerControl 同步,导致玩家的关卡完成时间只能以 21 帧为增量改进。
🔑 核心要点
- PICO-8 Lua 定时器 仅需两行代码:一个元表默认返回 0,一个 pairs 循环递减
- NES 超级马里奥用 21 帧的 IntervalTimerControl 分层定时:快定时器每帧更新,慢定时器每 21 帧更新
- 帧规则 源于慢速定时器与关卡结束动画的同步——玩家只能以 21 帧增量改进时间
- 每个 Enemy 对象可以有 自己的定时器表,只需确保 update 中滴答所有条目
- 检查 T.blip==1 而非 T.blip==0 可避免触发未设置定时器的误判
💡 金句
它简单到几乎不算一个系统!但我喜欢它既易懂又灵活——两行代码,读到哭。
👍 0
👎 0
← 返回 Lobsters 首页