2011-09-13 38 views
0

像以前的很多其他工具一樣,我現在正在編碼2D平臺變形器,或者在引擎上進行更精確的編碼。我的問題是關於碰撞檢測,尤其是碰撞的反應。基於矢量的2D平臺變形器中的碰撞檢測

對我來說,至關重要的是我的表面不是基於瓷磚的,因爲這個平臺的世界迫切需要不直的表面。

您認爲實現此目標的最佳方法是什麼?

我已經找到了解決方案,但我只有95%的滿意。

我的實體是基於組件的,所以它首先計算所有的運動。水平位置變化。落。跳躍速度;所有這一切。然後它暫時存儲這些值;碰撞組件可以訪問。

這一個給實體增加了4個生命值。兩個用於地板碰撞和兩個用於牆壁碰撞。

像這樣

image http://fux-media.com/collision.png

我第一次檢查對地板。當發生碰撞時,我向上迭代碰撞檢測,直到不再有碰撞。

我重置實體到這一點。如果兩個地面點都發生碰撞,我將實體重置爲最低點以避免實體在空中漂浮。

然後我檢查牆上的生命值。基本上,如果它碰撞,我就像上面一樣做,只是水平。

如果工作得很好。非常沉重的提升像牆壁一樣對待,非常低的提升只是攀升。但是在兩者之間,當提升大約在45度時,它表現得很奇怪。它感覺不太對勁。

現在,我可以避免在我的遊戲中實現45度的牆壁,但那不會是乾淨的,因爲我正在編寫一個無論如何都能正常工作的引擎。

所以...你會如何實現這個算法呢?

+0

我有類似的問題,傾斜的牆壁。經過幾次嘗試哈克解決方法和一個好的物理引擎需要迭代求解器的恍然大悟之後,我放棄了並用[Chipmunk](http://code.google.com/p/chipmunk-物理/)。 –

回答

1

我認爲你的觀點正確。您可以將這些點組合成一個多邊形,然後使用生成的多邊形執行碰撞檢測。

Phys2D是恰好在Java中的幾種類型的幾何圖元之間發生衝突的庫。該網站包括可下載/可運行的演示庫的功能。

如果環顧四周,您可以找到大多數常用語言中的2D多邊形碰撞檢測實現。通過一些研究,對底層幾何計算的理解,以及一些趣味,如果你喜歡,你甚至可以自己寫。