1 回答

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超22個(gè)贊
AABB 對(duì)比 AABB
我記得幾年前在制作我的第一款涉及一點(diǎn)物理的游戲時(shí)為此苦苦掙扎。我在互聯(lián)網(wǎng)上找不到任何相關(guān)信息,所以我制作了自己的算法。
您可以在函數(shù)中找到它AABB::detectCollision()
。此函數(shù)檢測(cè) 2 個(gè) AABB 之間的重疊和碰撞邊。我知道,它是 C++ 而不是 JS,但我相信您能夠?qū)⑺胺g”成 JS。
請(qǐng)記住,在不考慮兩個(gè)物體的速度的情況下檢測(cè)碰撞永遠(yuǎn)不會(huì)非常精確,并且不會(huì)在高速下工作。
圓與圓
對(duì)于圓,就簡(jiǎn)單多了。
假設(shè)您有 2 個(gè)相交的圓圈:一個(gè)“固定”圓圈A
和一個(gè)移動(dòng)圓圈B
。
兩個(gè)圓之間的重疊是通過(guò)計(jì)算它們之間的距離并減去它們的半徑之和來(lái)計(jì)算的:
overlap = magnitude(A.pos - B.pos) - (A.radius + B.radius)
碰撞法線(碰撞需要解決的方向)是通過(guò)歸一化兩個(gè)圓圈之間的增量來(lái)計(jì)算的:
direction = normalize(B.pos - A.pos) // An arrow pointing from A to B
然后你通過(guò)添加到由重疊縮放的方向的位置B
來(lái)移出。A
B
B.position += direction * overlap
添加回答
舉報(bào)