游戏开发 2 第 7 关
10s
🧪 5s
🍵

茶点时间 (Teatime)

Logic vs. UI Timers

⚙️ 逻辑控制
🖥️ UI 显示
🧠

逻辑计时器 vs UI 计时器

这个关卡有4个计时器,它们分工不同:

  • ⚙️ 3个 逻辑计时器 (Logic)
    用于判断何时生成敌人/药水。
    munchkinSpawnTime, potionSpawnTime...
  • 🖥️ 1个 UI 计时器 (UI)
    专门算给玩家看的倒计时。
    nextPotionIn
🖥️ UI 层
nextPotionIn: 5s
⚙️ 逻辑层
spawnTime: 15s
game.time: 10s
🔗

把数据连到屏幕上

我们需要告诉 UI 系统去“监视”哪个变量。

// 1. 初始化变量 game.nextPotionIn = 0; // 2. 绑定到 UI (让玩家能看见) ui.track(game, "nextPotionIn");
"track" 的意思是追踪。
一旦绑定,只要代码修改了 nextPotionIn,屏幕上的数字就会自动变!
💾 ➡️ 📺

倒计时怎么算?

玩家想知道“还剩几秒?”,而不是“第几秒生成?”

// 剩余时间 = 目标时间 - 当前时间 game.nextPotionIn = game.potionSpawnTime - game.time;

例子:
药水将在 15秒 时生成。
现在是 10秒
剩余时间 = 15 - 10 = 5秒

0s10s15s
已过 10s
剩 5s
🔄

核心循环: updateTimers

我们需要在一个函数里处理所有的计时逻辑,并在主循环里不断调用它。

auto updateTimers() { // 1. 检查是否该生成敌人... // 2. 检查是否该生成药水... // 3. 更新 UI 倒计时 (每帧都要算!) game.nextPotionIn = game.potionSpawnTime - game.time; } int main() { while(true) { updateTimers(); } return 0; }
⚙️

每帧都在运转

👾

生成逻辑详解

当时间到了,我们要:1. 生成单位,2. 设定下一次生成时间。

if (game.time > game.munchkinSpawnTime) { // 1. 更新下次时间 (+6秒) game.munchkinSpawnTime = game.munchkinSpawnTime + 6; // 2. 调用生成函数 spawnMunchkins(); }
注意:投矛手(Thrower)更危险,间隔要更长(+9秒)!
⏱️ > ⏰
⬇️
👾 + ⏰➡️
🏗️

代码结构概览

  1. 定义生成函数: spawnMunchkins(), spawnPotion()...
  2. 定义更新函数: updateTimers()
    • 检查 munchkin 时间 -> 生成 & 更新时间
    • 检查 potion 时间 -> 生成 & 更新时间
    • 计算 nextPotionIn (UI)
  3. 主函数 main():
    • 设置游戏目标
    • 初始化所有计时器 = 0
    • ui.track 绑定 UI
    • while(true) 循环调用 updateTimers()
📜 代码蓝图

Main Loop
  └── updateTimers()
       ├── Logic Check
       └── UI Update
🏆

通关秘籍

Logic Timer 用于机器:
累加 (current + 6)
控制游戏节奏。
UI Timer 用于人类:
相减 (target - current)
告诉玩家还要等多久。
🎖️