[程式] 遊戲中hit Test的方法
我現在HitTest 是針對每個 物體 自己去判斷有沒有被hit到
我會for的方式去呼叫 每個物體的Update函式
物體.Update()
{
HitTest();
}
但現在問題是
如果被遮擋 我兩個都會偵測到
假如A 擋著 B 點到的話 都會反白
這時我點A 但是B也跟著 反白(反白這件事 是在hit test時 作的動作)
這是錯的
變成說 我現在想改成 從近的Z 往遠的開始做Update
所以先hit到的一定是近的 遠的就不做hittest了
但這又有個問題
如果A 和 B 都會轉動 有可能動態 B會跑到A上面...........我總不可能動態得知
哪個區域在前面(可能只有某部分overlap)
所以原本想說從 遠判斷到近 就不可行了............
有沒有什麼關於這問題的演算法可以參考.....
實在是自己想不到什麼好方法
=========================================
我自己想到暴力的方法是...
UpdateAllObject()
{
global List(大小為多少個object)裡面所有的distance先設為 負值
for (每個物體i)
{
物體.Update();
//在HitTest時 我會用一個global的List去記錄 hit到的distance 記錄在[i]
//這時先不去做反白的動作
}
當上面for做完 我就會記錄下 所有物體i 所hit到的distance (沒hit到維持負值)
for(掃描所有distance值)
{
找出最小distance 看是第幾個i
}
上面for做完 我就得到真正hit到的是哪個物體........
再把反白的動作 抽到這裡去做
}
但感覺超暴力 我每個frame都呼叫UpdateAllObject()
並且去清空list 並請作一些for的動作
上面方法也是可以改成 每次hittest到的distance都判斷和前一個哪個近 近的再留下
這樣for完 就直接得到最近的物體了
再去做反白的動作
以上是我想到的方法 不知道有沒有更有效率的方式來做到呢
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.87.64.222
推
05/13 17:09, , 1F
05/13 17:09, 1F
推
05/13 18:44, , 2F
05/13 18:44, 2F
推
05/13 22:51, , 3F
05/13 22:51, 3F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):