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

游戏事件:Defeat

被击败的艺术

💰 掉落金币
🐲 九头蛇
💀

什么是 "defeat" 事件?

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

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

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

onDefeat:遗言脚本

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

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

牺牲小怪,造福玩家

🎲

金币掉在“附近”

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

# 原地 x 加上 -5 到 5 的随机偏移
x = unit.pos.x + game.randomInteger(-5, 5)
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 里生成两个新敌人,就能实现“砍掉一个头,长出两个头”的效果!

def onDefeat(event):
  unit = event.target
  # 生成两个新的
  game.spawnXY("munchkin", x1, y)
  game.spawnXY("munchkin", x2, y)
👾
点击怪物分裂
🏆

击败事件口诀

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