作者ericabab (ㄍㄠˊ)
看板GameDesign
標題[請益] 物體速度過快如何判斷碰撞 (pygame)
時間Mon Mar 16 17:19:53 2020
版友好,個人是新手,出於興趣最近在用pygame練習python
想到一個可能發生的問題
原本在判斷碰撞時,是在每個frame將主角跟障礙物的hitbox看有沒交集,
(假設主角跟障礙物都是長方形,因此只要用座標判斷有沒重疊)
但如果主角的速度太快,有可能在一個frame內移動已經超過障礙物的hitbox,
這樣就會變成穿牆了。
個人的想法是將主角的起點到終點路徑整個都算成hitbox,
但這樣好像會有大量運算,因為新的hitbox就不是長方形了,
導致變成要將障礙物內每個點去判斷有沒撞到主角
不曉得這種情況正常是怎麼處理呢?
主要是想問概念,不侷泥於語法跟語言,謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.230.211.24 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/GameDesign/M.1584350395.A.AB5.html
1F:→ laikyo: 限制加速度 03/16 19:09
如果是真的想跑這麼快呢?
2F:推 wulouise: 只看一個frame的起終點算是一個長方體吧?預看下個frame 03/16 19:39
3F:→ wulouise: 會不會超過,超過就卡著 03/16 19:39
如果路徑是斜的,就不是長方體了?
4F:推 BSpowerx: raycast路徑 03/16 21:05
我來google查查,謝謝
5F:推 NDark: 用線去算碰撞不要用點去算碰撞. 03/17 01:00
6F:推 jackyT: tunneling也可以用掃的去看 03/17 01:29
8F:→ jackyT: ection.html 03/17 01:30
9F:→ jackyT: 被換行了 悲劇 03/17 01:30
11F:推 aegis123321: 問概念的話推薦box2D作者在GDC的演講: 03/17 08:34
感謝樓上幾位的資訊!
※ 編輯: ericabab (36.230.211.24 臺灣), 03/17/2020 17:59:51
13F:推 KuLanDot: 之前有遇到一樣的問題,我的作法是把上一個影格到 03/18 00:08
14F:→ KuLanDot: 這個影格的矩形的四個角產生四條路徑,只要有任一條跟 03/18 00:09
15F:→ KuLanDot: 目標矩形交會的話,就算有碰撞 03/18 00:09
17F:推 linaomasa: 我是用兩線段取最短距離 03/20 12:33
18F:推 cjcat2266: 四條路徑的算法,特定方向和形狀還是會有漏網之魚 03/20 17:34
19F:→ cjcat2266: shape cast的做法之一,是把要投射的形狀A拿到被測試的 03/20 17:34
20F:→ cjcat2266: 形狀B上,在B的範圍內掃出一個更大的區域 03/20 17:35
21F:→ cjcat2266: (Minkowski Sum),然後A本身縮成一個點,從該點對之前 03/20 17:36
22F:→ cjcat2266: 掃出來的區域進行ray cast 03/20 17:36