[程式] 遊戲中hit Test的方法

看板GameDesign作者 (我愛阿蓉)時間14年前 (2010/05/13 15:34), 編輯推噓3(300)
留言3則, 3人參與, 最新討論串1/2 (看更多)
我現在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
可以google "hit test iphone" 參考Apple作法...
05/13 22:51, 3F
文章代碼(AID): #1BwwkJIK (GameDesign)
文章代碼(AID): #1BwwkJIK (GameDesign)