2011-08-25 72 views
1

我正在製作一個使用非常簡單的碰撞檢測的遊戲。我沒有使用2D盒,因爲這是一個矯枉過正的問題。基本上,它是Pong和fooseball的組合。當球速度加快並且速度非常高時,它會穿過它應該碰撞的牆。該代碼以慢速和常規速度運行,但運動速度非常快。在碰撞期間穿過牆壁的物體

這是我的代碼snipet:

pos.x是保持我的球中的x位置的矢量。

if (pos.x - radius < wallLeft){ 
     pos.x = wallLeft + radius; 
     vel.x *= -1; 
} 

我該怎麼做才能改善這種情況? 謝謝

+0

球只在一個方向穿過牆嗎? –

+0

球是否暫時通過並且反彈得太晚或者不會反彈?此外,我們需要這些字段的類型以及您在此之前如何進行運動計算。 – KillianDS

+0

嘗試在if語句的條件檢查上設置一個斷點,以便查看爲什麼它沒有註冊。你是否使用pos.x作爲無符號整數? – Dawson

回答

0

嘗試增加wallLeft一點,以便球的速度永遠不會比wallLeft更大,看起來球落到0以下後它會出現毛刺(或者你有一些我不知道的代碼),不熟悉框架或其他代碼是如何工作的,但這是解決它的最簡單方法。如果你不想這麼做,那麼如果球的x小於0,那麼可能有一些代碼會執行某些操作,並且你必須使它更加寬鬆一點,也許可以這樣做,以便如果球的x是小於-50,或類似的東西(玩數字直到它工作)

+0

我認爲增加wallLeft實際上會移動他的牆... – KillianDS

+0

我不這麼認爲,這聽起來像牆壁從wallLeft到屏幕左側,牆壁會增長,但這是簡單的修復。 – Markcf

0

可以說,如果(pos.x - 半徑)== wallLeft然後球已經觸及牆壁,其速度可以顛倒;如果你在循環中添加這個作爲一個額外的測試它有幫助嗎?

+0

我把它放到if語句中,我什麼也沒得到。雖然值得嘗試。謝謝 –

0

我唯一的想法是速度非常高,以至於在將其添加到位置時發生溢出,再次產生pos.x> wallLeft + radius。

+0

我有一種感覺,速度變得比幀率更高,所以當程序通過時程序無法計算球的位置。該程序運行在60fps。那有意義嗎? –

+0

@lucas:不是真的,如果它在第一幀錯過了它,它應該在第二幀得到它,因爲你實際檢查它是否在牆後面,而不是如果它與牆重疊。即使它會超過/下溢,它實際上應該出現在另一側(如果計算結果相似)。所以我認爲我們錯過了一些代碼。 – KillianDS

+0

是的,你應該在這裏發佈更多的代碼。上面的代碼片段不足以顯示。 – karx11erx