亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

解決 2D 碰撞

解決 2D 碰撞

慕斯709654 2023-04-14 15:08:42
我正在制作游戲并且可以檢測碰撞。我現在需要解決它們。我想要的是重疊 x 和 y 以便我可以否定它。獲得重疊的形狀。圓與圓。圓形和矩形。注意不需要旋轉。關于堆棧溢出有一些答案,但沒有一個是我想要的。我只需要重疊 x 和 y,僅此而已。
查看完整描述

1 回答

?
茅侃侃

TA貢獻1842條經驗 獲得超21個贊

AABB 對比 AABB

我記得幾年前在制作我的第一款涉及一點物理的游戲時為此苦苦掙扎。我在互聯網上找不到任何相關信息,所以我制作了自己的算法。

您可以在函數中找到它AABB::detectCollision()。此函數檢測 2 個 AABB 之間的重疊和碰撞邊。我知道,它是 C++ 而不是 JS,但我相信您能夠將它“翻譯”成 JS。

請記住,在不考慮兩個物體的速度的情況下檢測碰撞永遠不會非常精確,并且不會在高速下工作。

圓與圓

對于圓,就簡單多了。

假設您有 2 個相交的圓圈:一個“固定”圓圈A和一個移動圓圈B。

兩個圓之間的重疊是通過計算它們之間的距離并減去它們的半徑之和來計算的:

overlap = magnitude(A.pos - B.pos) - (A.radius + B.radius)

碰撞法線(碰撞需要解決的方向)是通過歸一化兩個圓圈之間的增量來計算的:

direction = normalize(B.pos - A.pos) // An arrow pointing from A to B

然后你通過添加到由重疊縮放的方向的位置B來移出。AB

B.position += direction * overlap


查看完整回答
反對 回復 2023-04-14
  • 1 回答
  • 0 關注
  • 124 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號