2011-12-20 93 views
1

我正在開發一個簡單的遊戲,其中有磚塊,球和槳,你應該打磚塊與球(你都知道這個遊戲)。遊戲開發爲Android,離散運動

我的問題有點複雜,球以恆定速度運動,假設每秒200px,假設我每秒鐘有30幀。這意味着每一幀球移動大約7個像素。

我有兩件事我做每幀: 1.在屏幕上繪製遊戲。 2.移動球,碰撞檢測等。

問題是在X幀中,球沒有碰到任何東西,但是在X + 1幀中他移動了7個像素,然後他部分在一個磚內或者部分在兩個相鄰的磚塊內部,這更糟糕)。

發生這種情況是因爲運動是離散的而不是連續的。

我真的不知道應該如何處理它,我在每一個我開發的遊戲中都遇到了這個問題(不僅適用於android,也適用於PC)。可能我錯過了我對遊戲開發的理解中至關重要的一些東西。

在此先感謝。

回答

3

這是對數學有點沉重,但有在

http://www.gamedev.net/page/resources/_/technical/math-and-physics/a-verlet-based-approach-for-2d-game-physics-r2714? 

一個很好的文章(由於_在URL似乎打亂了這麼標記......)

本質上講,你幾乎做得對 - 當然,有更多的方法來做到這一點。只要確保在尋找碰撞時可以使用old(x,y)new(x,y),並且在完成碰撞檢測之後才考慮移動路徑「暫定」。 (也許present(x,y)destination(x,y)是更好的條件)

突圍磚彈跳遊戲的情況下,你要尋找的其中present (x,y) + movement (x,y) → destination (x,y)線(或載體)與磚的邊緣相交,並創建與交點處頂點的反射角。您可以快速輕鬆瀏覽該文章關於剛體響應的整個後半部分。

+1

以上鍊接在Chromium中不起作用。嘗試http://www.gamedev.net/page/resources/_/technical/math-and-physics/a-verlet-based-approach-for-2d-game-physics-r2714 – austinmarton 2012-12-12 03:01:47

+0

謝謝。當我試圖粘貼時,Markdown在這裏似乎吃掉了URL。 (引用適當的層次將是我的死亡。) – BRFennPocock 2012-12-12 15:51:55

0

最簡單的解決方案是使用某種類型的物理引擎。 Box2d是一個很棒的2D物理引擎,有多種語言編寫的包裝器。

通過使用物理引擎,您不必擔心碰撞檢測。所有這一切都爲您照顧,以便您可以更專注於開發遊戲的核心功能。