2011-09-13 29 views
2

我一直在尋找示例和教程,但找不到任何具體的東西。計算矩形與路徑線的碰撞

我正在製作2D XNA C#遊戲,並且我想在播放器到達一條或多條路徑線時檢測播放器的最終位置,所以它不會跨越它們。

玩家由一個碰撞矩形組成,路徑線是所有段。所以基本上我有玩家的碰撞矩形和下一個玩家的位置碰撞矩形。如果下一位玩家的位置與路徑線發生碰撞,我想要找出玩家可能遭受的最大位移。

的圖像顯示了或多或少是我想做的事:

Picture

我想找到紅色矩形的位置。

有沒有人有任何算法,解決方案或任何可以幫助我的鏈接?甚至可能是一個樣本。

+0

是否有任何特定的原因,你爲什麼使用矩形不是圈子? –

+0

@piotr Auguscik可能是一個精確問題。 – MGZero

+0

只是問,用圓這樣的任務更容易:) –

回答

0

假設你已經有辦法檢查一個特定的碰撞箱是否包含碰撞,我建議在玩家的當前位置和碰撞箱之間進行二進制搜索:在碰撞和碰撞之間選擇一個點先前已知的非碰撞框。用這個新的碰撞盒再次測試。如果不是碰撞,在這個點和已知的碰撞盒之間的中點選擇一個點,否則向後選擇一個點。重複上述步驟,直到找到滿意的準確級別的非碰撞盒子(比如1至2像素)。只有少數測試,你應該能夠找到這樣一個點。

+0

感謝您的迴應。順便說一下,你認爲這種方法能夠工作得足夠快嗎?你知道更快的方式嗎? –

+0

不客氣。我也在考慮性能,這可能不是一個特別快速的方法,但它應該只在碰撞即將發生時纔有效。根據你的遊戲的性質,只要玩家的速度不是太大,你應該不需要超過5次左右的測試才能獲得滿意的位置,考慮到你可能正在做的在任何情況下,每幀都會進行碰撞檢查。如果沒有別的,它可能是一個參考實現,您可以將其用作優化的基礎。 –

+0

至於更快的替代品,我認爲這將取決於你的遊戲機制和碰撞檢查的實施。也許通過更巧妙地進行碰撞檢查,您可以獲得有關碰撞位置的一些信息。例如,一旦發生碰撞,您可以使用較小的子矩形重新測試以查看碰撞的位置。這些信息可以讓你快速找出需要移回玩家的距離,但是這個機制可以在一些假設上運作,我不會輕易對你的遊戲進行評估。 –