2011-09-14 87 views
2

剛剛開始使用XNA,這個例子會幫助很多!檢測球擊中邊界框的位置? XNA

我已經完成了一個簡單的測試,在那裏我得到了一些地形和一個球,當球擊中它的地形時停止。這是通過將球的位置設置在碰撞時的地形頂部來實現的。

對我的問題,即時使用邊界框這一點,但它看起來不是很好,如果球從左側或右側擊中地形,因爲它在頂部respawns。我如何檢查它是否在側面?

代碼的短毛刺現在:

if (playerOne.BoundingBox.Intersects(terrain.BoundingBox) 

    playerOne.Position.Y = terrain.BoundingBox.Top; 

哪裏playerOne是球。

在此先感謝!

+0

只是爲了讓你知道:有一個堆疊兌換隻適用於遊戲:http://gamedev.stackexchange.com/ – v42

回答

1

XNA BoundingBox沒有內置的方法來幫助確定哪邊發生了碰撞。有些人已經把邊界框分成了6個框(當前框的每個面都有一個框,比如房間周圍的牆),但是這仍然會在可能有重疊的角落附近產生一些麻煩,並且必須解決您認爲的框先打。

最終的解決方案是爲當前邊界框的每個面創建一個平面,並且如果邊界框檢測到碰撞,則檢查是否與每個平面發生碰撞。當你發生碰撞時,它可能一次對抗1,2或3架飛機。如果超過1,那麼你需要determine point/plane contact positions爲每個涉及的飛機&,以較接近球的前一個位置,這是它首先命中的一面。

+0

感謝您的提示,偉大的explenation :) –

+0

嘿史蒂夫有沒有什麼機會,你有一些代碼?謝謝! – Martin

1

我強烈推薦本教程,它通過使用數學助手和弧度將蝙蝠分成不同區域並設置各種碰撞反彈條件來涵蓋您的確切情況。

http://ross-warren.co.uk/pong-clone-in-xna-4-0-for-windows/6/ 

這是一方面,但你應該能夠適應原則。

+0

非常感謝!真的幫助我出 –