[請益] 物體速度過快如何判斷碰撞 (pygame)

作者: ericabab (ㄍㄠˊ)   2020-03-16 17:19:53
版友好,個人是新手,出於興趣最近在用pygame練習python
想到一個可能發生的問題
原本在判斷碰撞時,是在每個frame將主角跟障礙物的hitbox看有沒交集,
(假設主角跟障礙物都是長方形,因此只要用座標判斷有沒重疊)
但如果主角的速度太快,有可能在一個frame內移動已經超過障礙物的hitbox,
這樣就會變成穿牆了。
個人的想法是將主角的起點到終點路徑整個都算成hitbox,
但這樣好像會有大量運算,因為新的hitbox就不是長方形了,
導致變成要將障礙物內每個點去判斷有沒撞到主角
不曉得這種情況正常是怎麼處理呢?
主要是想問概念,不侷泥於語法跟語言,謝謝
作者: laikyo (六元)   2020-03-16 19:09:00
限制加速度
作者: wulouise (在線上!=在電腦前)   2020-03-16 19:39:00
只看一個frame的起終點算是一個長方體吧?預看下個frame會不會超過,超過就卡著
作者: BSpowerx (B.S)   2020-03-16 21:05:00
raycast路徑
作者: NDark (溺於黑暗)   2020-03-17 01:00:00
用線去算碰撞不要用點去算碰撞.
作者: jackyT (Ubuntu5566)   2020-03-17 01:29:00
tunneling也可以用掃的去看https://docs.unity3d.com/Manual/ContinuousCollisionDetection.html被換行了 悲劇https://tinyurl.com/urx4af8
作者: aegis123321 (PE)   2020-03-17 08:34:00
問概念的話推薦box2D作者在GDC的演講:https://www.youtube.com/watch?v=7_nKOET6zwI
作者: KuLanDot (庫蘭達克斯)   2020-03-18 00:08:00
之前有遇到一樣的問題,我的作法是把上一個影格到這個影格的矩形的四個角產生四條路徑,只要有任一條跟目標矩形交會的話,就算有碰撞像這張圖 https://i.imgur.com/UamZvuV.png
作者: linaomasa (沒穿褲子先生)   2020-03-20 12:33:00
我是用兩線段取最短距離
作者: cjcat2266 (CJ Cat)   2020-03-20 17:34:00
四條路徑的算法,特定方向和形狀還是會有漏網之魚shape cast的做法之一,是把要投射的形狀A拿到被測試的形狀B上,在B的範圍內掃出一個更大的區域(Minkowski Sum),然後A本身縮成一個點,從該點對之前掃出來的區域進行ray cast

Links booklink

Contact Us: admin [ a t ] ucptt.com