🚧 游戏开发 2 | 第 17-18 关
💥

游戏事件:Collide

碰撞与破坏

🍄 变身
🧱 破坏
🤜

什么是 "collide" 事件?

当一个物体“撞到”另一个物体时,触发 collide

与 collect 的区别:
🎒 collect:踩到、捡起(软物体,如金币)
🧱 collide:撞上、挤到(硬物体,如墙、人)
🤠
💥
🧱
👥

碰撞双方:target & other

碰撞是双向的,但在代码里我们通常只从一个角度看:

auto onCollide(auto event) { // event.target: 我 (unit) auto unit = event.target; // event.other: 对方 (被撞物) auto obj = event.other; }

可以读作:“unit 撞到了 obj。”

🤠
Target (我)
⚡ 💥 ⚡
🚧
Other (它)
🍄

准备工作:吃蘑菇变大

要破坏围栏,首先得变强!

auto onCollect(auto event) { auto item = event.other; if (item.type == "mushroom") { // scale: 缩放比例 unit.scale = 2; unit.say("变大!"); } }

unit.scale = 2:变成原来的 2 倍大(巨人模式)。

🤠
🍄
点击蘑菇变身
🔨

关键时刻:撞碎围栏

只有巨人才能撞碎围栏!

auto onCollide(auto event) { auto obj = event.other; if (obj.type == "fence") { // 检查是不是巨人? if (unit.scale == 2) { // 彻底销毁对象 obj.destroy(); } } }

destroy():直接从世界上移除(消失)。

🦖 ➡️ 🚧 💥

Double Check:

  1. 撞的是围栏吗?(type == "fence")
  2. 我是巨人吗?(scale == 2)
⚖️

Defeat vs Destroy

方法 defeat() destroy()
含义 打败 销毁
效果 倒下,尸体还在 彻底消失,没了
对象 生物 (Unit) 障碍物 (Obstacle)
围栏没有生命,不能被打败,只能被拆除 (destroy)
🌪️

药效过了:变回原型

魔法只能持续 3 秒。

if (game.time > endTime) { if (player.scale == 2) { player.scale = 1; // 还原 } }

"时间一到,再大的巨人也要变回原来的小队长。撞墙只会头痛哦!"

🦖
🕒 ➡️
🤠
🎓

破坏王口诀

吃了蘑菇 scale=2
变身巨人力量大。
撞到围栏 collide
一击 destroy 全拆掉!
🏆