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