Re: [程式] 關於射擊遊戲子彈與怪物碰撞的運算量

看板GameDesign (遊戲設計)作者 (純潔)時間15年前 (2010/03/21 14:34), 編輯推噓3(3010)
留言13則, 3人參與, 最新討論串3/4 (看更多)
借標題問個問題 假設有高速移動的炮彈 (30像素/frame 以上 差不多0.3秒穿越螢幕) 對著另一高速物件射擊 要怎麼樣才能有效率又保有正確性的計算碰撞呢? 因為,在兩個frame間,物體的位置變化很大 用傳統的畫方格計算,會很容易漏掉 漏掉的狀況: 理論上應該要撞到,但每個frame的判斷都是沒撞到 ◎ frame2 ↑ │ ●──┼─→●frame2 frame1│ │ ◎frame1 我自己想兩個方法 1.把每秒的計算次數調高,但繪圖維持每秒60frame不變 2.數學法,把移動路徑算出來,再計算有沒有重疊 但都覺得可能會出問題.... 請問一般狀況下,處理高速碰撞的話,都怎麼解決? -- ◢ 鄉民啊!鄉民! 請告訴我誰是最純潔的人! ◢█ │ PTT │ ██ :就是你!Snow White F23ko!│ █◤ ╯ ◤ ﹨(╯▽╰ )∕ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.27.109.99

03/21 14:56, , 1F
我之前自己寫的射擊小遊戲是額外做處理
03/21 14:56, 1F

03/21 14:56, , 2F
簡單來講就是用子彈的位置+前進方向作成一個ray
03/21 14:56, 2F

03/21 14:56, , 3F
然後用ray來檢查路徑上有沒有穿過物體
03/21 14:56, 3F

03/21 14:56, , 4F
有的話就判斷最近的交叉點,然後抓這個點和子彈的距離
03/21 14:56, 4F

03/21 14:57, , 5F
如果距離小於子彈一個frame移動的距離,就代表下一f命中
03/21 14:57, 5F

03/21 15:00, , 6F
接著就是在下一個frame中判斷子彈的位置
03/21 15:00, 6F

03/21 15:00, , 7F
如果子彈和物體的距離足夠小,或是已經穿過了就算命中
03/21 15:00, 7F

03/21 16:26, , 8F
這方法似乎不錯
03/21 16:26, 8F

03/21 21:28, , 9F
補充一下,這方法在目標物會移動的時候還需要額外做檢查
03/21 21:28, 9F

03/21 21:28, , 10F
在下個f中做一個反向ray,確保目標仍在彈道路徑上
03/21 21:28, 10F

03/21 21:29, , 11F
不然如果目標也在高速移動,很可能就會出現錯誤命中
03/21 21:29, 11F

03/21 23:57, , 12F
把子彈對目標的相對速度方向當ray去檢查交叉
03/21 23:57, 12F

03/21 23:58, , 13F
就不用額外處理目標會動的狀況了
03/21 23:58, 13F
文章代碼(AID): #1BfRu5sv (GameDesign)
文章代碼(AID): #1BfRu5sv (GameDesign)