🐵指尖猴全新升级
第13课:碰撞检测
💥

碰撞检测

所有碰撞的幕后真相:矩形碰矩形

📖知识引入

📦判定盒:看不见的快递箱
每个游戏物体身上都套着一个隐形矩形,叫判定盒(Hitbox)。碰撞检测不管图案多漂亮,只问一句话:两个矩形重叠了吗?
🤝重叠=撞上了
两个矩形相遇只有四种姿势:完全分开、左右相交、上下相交、完全重叠。判断方法 surprisingly 简单:横竖方向都有交集,就算撞上。
🎯判定盒可以「手下留情」
为什么有时擦边不算撞?高手设计会把判定盒做得比图案小一圈:视觉上「擦到了」,判定上「没碰到」——玩家会觉得手感特别公平。
⚡一秒查60遍
游戏每一帧(每秒约60帧)都要检查所有物体两两是否碰撞。角色多的时候计算量不小,所以判定盒都是简单的矩形,算得飞快。
🤖碰撞函数一句话搞定
「帮我写一个矩形碰撞检测函数」——AI秒出标准答案,全世界的游戏都在用几乎同一份。会用、会改,比会背强。
💡
碰撞检测的真相:两个看不见的矩形碰没碰上!

🔍肉眼看不见的碰撞现场

// 矩形碰撞检测:全世界游戏都在用的四连问
function isCrash(a, b) {
  return a.x + a.width  > b.x &&   // A的右边超过B的左边
         a.x < b.x + b.width  &&   // A的左边没过B的右边
         a.y + a.height > b.y &&   // A的下边超过B的上边
         a.y < b.y + b.height;     // A的上边没过B的下边
}

// 每帧检查:主角碰到金币了吗?
if (isCrash(player, coin)) {
  score += 10;          // 加分!
  playSound('叮!');      // 音效!
  coin.respawn();       // 金币换新位置
}

主角和金币各自的判定盒:

金币的盒子
  ┌──────┐
  │ 🪙   │
  └─┬────┘
    │ 撞上了!
┌───▼──┐
│  🏃  │  <-主角的盒子
└──────┘

判断两盒是否重叠, 只看四个条件:

A右边 > B左边? ✔ A左边 < B右边? ✔ A下边 > B上边? ✔ A上边 < B下边? ✔

四问全YES→撞上了!💥
任何一问NO→没撞,继续飞

判定盒「手下留情」的秘密:

图案大小: 🚶←──────→ 判定盒大小:🚶←───→ (小一圈)

子弹贴着衣角飞过—— 玩家:「好险!刺激!」 而不是:「明明没碰到吧?!」

🎯小测验

第1题:碰撞检测实际上检测的是?

第2题:为什么有些游戏擦边不算被撞?

第3题:「帮我写一个矩形碰撞函数」让AI写,合理吗?

📝本课知识点

  • ✓每个物体都有隐形判定盒
  • ✓重叠=碰撞,看四个条件
  • ✓判定盒小一圈,手感更公平
  • ✓每秒约60帧重复检测
  • ✓碰撞函数可让AI代劳
第13课完成!继续探索下一课吧 🚀