作者F23ko (純潔)
看板GameDesign
標題Re: [程式] 關於射擊遊戲子彈與怪物碰撞的運算量
時間Sun Mar 21 14:34:41 2010
借標題問個問題
假設有高速移動的炮彈 (30像素/frame 以上 差不多0.3秒穿越螢幕)
對著另一高速物件射擊
要怎麼樣才能有效率又保有正確性的計算碰撞呢?
因為,在兩個frame間,物體的位置變化很大
用傳統的畫方格計算,會很容易漏掉
漏掉的狀況:
理論上應該要撞到,但每個frame的判斷都是沒撞到
◎ frame2
↑
│
●──┼─→●frame2
frame1│
│
◎frame1
我自己想兩個方法
1.把每秒的計算次數調高,但繪圖維持每秒60frame不變
2.數學法,把移動路徑算出來,再計算有沒有重疊
但都覺得可能會出問題....
請問一般狀況下,處理高速碰撞的話,都怎麼解決?
--
◢
鄉民啊!鄉民! 請告訴我誰是最純潔的人!
◢█ │
PTT │
██
:就是你!Snow White F23ko!│
█◤ ╯
◤ ﹨(╯▽╰ )∕
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.27.109.99
1F:推 akilight:我之前自己寫的射擊小遊戲是額外做處理 03/21 14:56
2F:→ akilight:簡單來講就是用子彈的位置+前進方向作成一個ray 03/21 14:56
3F:→ akilight:然後用ray來檢查路徑上有沒有穿過物體 03/21 14:56
4F:→ akilight:有的話就判斷最近的交叉點,然後抓這個點和子彈的距離 03/21 14:56
5F:→ akilight:如果距離小於子彈一個frame移動的距離,就代表下一f命中 03/21 14:57
6F:→ akilight:接著就是在下一個frame中判斷子彈的位置 03/21 15:00
7F:→ akilight:如果子彈和物體的距離足夠小,或是已經穿過了就算命中 03/21 15:00
8F:→ F23ko:這方法似乎不錯 03/21 16:26
9F:推 akilight:補充一下,這方法在目標物會移動的時候還需要額外做檢查 03/21 21:28
10F:→ akilight:在下個f中做一個反向ray,確保目標仍在彈道路徑上 03/21 21:28
11F:→ akilight:不然如果目標也在高速移動,很可能就會出現錯誤命中 03/21 21:29
12F:推 HomeboyWu:把子彈對目標的相對速度方向當ray去檢查交叉 03/21 23:57
13F:→ HomeboyWu:就不用額外處理目標會動的狀況了 03/21 23:58