🗺️ 游戏开发 2 | 第 9-10 关
☠️

游戏事件:Defeat

被击败的艺术

💰 掉落金币
🐲 九头蛇
💀

什么是 "defeat" 事件?

Defeat 意味着一个单位的生命值变成了 0。

当小怪兽倒下时,我们可以触发一个“遗言脚本”:

  • 掉落物品:爆出一地金币!
  • 👻 分裂重生:像九头蛇一样变出两个!
  • 📊 更新数据:计分板 +1。
👾
点击怪兽击败它!
📜

onDefeat:遗言脚本

我们需要定义一个函数来处理“身后事”。

auto onDefeat(auto event) { // event.target 是谁被打倒了? auto unit = event.target; // 在尸体位置生成金币 game.spawnXY("gold-coin", unit.pos.x, unit.pos.y); }
event.target = 倒霉蛋 (主角)
unit.pos = 倒下的地点
⚰️ ➡️ 💰

牺牲小怪,造福玩家

🎲

金币掉在“附近”

为了更真实,金币不应该跟尸体完全重叠,而是“爆”在旁边。

// 原地 x 加上 -5 到 5 的随机偏移 float x = unit.pos.x + game.randomInteger(-5, 5); float y = unit.pos.y + game.randomInteger(-5, 5); game.spawnXY("gold-coin", x, y);
👾
🔗

全员应用:setActionFor

写好脚本后,别忘了挂载到事件上。

game.setActionFor("munchkin", "defeat", onDefeat);

这句话的意思是:
“所有 munchkin,只要 defeat (被打败),就执行 onDefeat。”

对比:
"spawn" 管出生(设置属性)
"defeat" 管死亡(掉落奖励)
📝 📎 💀
🧮

进阶:游戏计数器

我们需要变量来统计战况:

game.defeated += 1; // 打败数 +1 (累计) game.toDefeat -= 1; // 剩余数 -1 (倒数)

+= 1:在原来基础上加一
-= 1:在原来基础上减一

Kill: 0
Left: 10
🐲

九头蛇魔法:一变二!

onDefeat 里生成两个新敌人,就能实现“砍掉一个头,长出两个头”的效果!

auto onDefeat(auto event) { auto unit = event.target; // 生成两个新的 game.spawnXY("munchkin", x1, y); game.spawnXY("munchkin", x2, y); }
👾
点击怪物分裂
🏆

击败事件口诀

"矮人倒在哪 (pos),
金币就从附近弹出来 (random)!"
"还要打的减一只 (-=),
已经打的加一只 (+=)!"
🏅