2011-04-15 113 views
1

我試圖創建一個新的遊戲,其中一輛車沿着地面行駛,但也有能力使用推進器暫時空降。我比較擅長編寫Java,C,C++等,所以我不認爲這應該是一個問題(認爲遊戲的第一次迭代是在Java中) 。我的問題是我從頭開始,並且無法想象地形成障礙的方式,所以車輛不會穿過它。我怎麼能讓他們受到傷害?地形和碰撞在遊戲中

過去人們已經指示我到副本島的源頭,因爲它已經包含了它,我看到了整個碰撞系統,但到目前爲止我還沒有弄清楚它,我希望有人會願意幫我一把。

謝謝

-Roflha

+0

您的遊戲是2D還是3D?我假設你以任何方式使用OpenGL? – Maximus 2011-04-15 04:10:08

+0

@Maximus它將是2D,我將使用OpenGL。 – 2011-04-15 19:44:22

回答

5

什麼是您使用來開發遊戲?一個引擎或圖形庫?基本上有三個層次(我喜歡考慮它們):圖形庫,圖形引擎和遊戲引擎。

  • 圖形庫是相當多的 低的水平,你可以得到:OpenGL或DirectX的 。當你想繪製出 您的地形,你會被繪製爲 三角形的網格,並定義這些三角形的頂點 等

  • 圖形引擎是最重要的是 一層。那些例子(至少C++ )是Ogre3D,Horde3D和 Irrlicht。他們會照顧 許多較低級別的命令,並且 讓您專注於更高級別角度的更多 的圖形。

  • 遊戲引擎幾乎將 照顧任何圖形相關。 這些(又是C++)的例子是 Unity和UDK。他們一般可以做 很多遊戲編程爲 你。你可能會在建模程序 (3dsmax等)中繪製你的 地形,將其導出爲 的格式,然後引擎會將它sl到 並準確知道如何處理它。

我玩過所有三種,並找到圖形庫最有趣。但是,他們可能會花最長時間來製作一款遊戲。他們還涉及更多的數學(線性代數)。

就地形碰撞檢測而言。你必須知道組成這個地形的三角形。如果您正在使用遊戲引擎,您應該能夠在某種「場景節點」中存儲地形的網格和角色的網格,並且它將自動處理碰撞檢測。但是,如果你正在處理一切自己,有很多流行的算法來做到這一點:

  • 包圍盒:即使你的角色的形狀像一個人(或動物等),你把他們當作一個框,並檢查該框與組成地形的網格的三角形相交的時間。
  • Bounding Sphere:將角色視爲球體,因爲如果球體相互碰撞,球體更容易看到。您只需使用「從球體中心到另一個網格的距離」來檢查「球體半徑」。然後,如果這個球體發生碰撞,你可以將它分解成更精確地代表你的角色的小球體。你可以從那裏迭代3次或4次,或者像你想表達你的角色一樣準確。請記住,遊戲中的所有內容都必須快速快速地進行,所以這就是限制遞歸的原因。

An excellent article on bounding sphere collision detection

我寫了一個樣本的OpenGL程序,基本上可以讓一個角色,這是由邊界框表示,走動的地形,這需要碰撞檢測。讓我知道你是否對它的工作原理更感興趣。

您可以處理秋天損害幾種方法:

  1. 如果角色不飛,你可以使用一個簡單的狀態機。一旦它們進入空中,將狀態改變爲「IN AIR」,並且在遊戲外觀正在運行時,設置一個計時器並跟蹤它們在空中的時間。如果他們在空中停留的時間太長,那麼根據他們有多長時間計算不同的傷害量。
  2. 更準確的方法是跟蹤角色的速度。這對現實生活是準確的。如果你慢慢墜落,墜落傷害沒有意義。如果你快速墜落,你會受到更多的傷害。因此,想出一些將fall_speed與損害聯繫起來的等式。然後,一旦他們碰到地面,將狀態機改回「ON_GROUND」並檢查fall_speed(可能是y_velocity)。
+0

我從頭開始編寫所有的東西,並使用OpenGL作爲圖形。整個包圍球的事情看起來是我正在尋找的東西。我對你的樣品非常感興趣。這聽起來像我現在試圖用這些車輛實施的。至於秋天的傷害,我打算有一些引力常數(如你所說的那麼現實),但我仍然不知道什麼時候加速遊戲對象(找出他們沒有接觸地面的時候) – 2011-04-15 22:11:50

+0

那麼我可以詳細說明我的碰撞檢測,如果你想。不過,我使用的是盒子,而不是球體。我的地形是作爲一個高度圖來實現的。您可以通過使用Google搜索「高度圖」瞭解遍佈互聯網的全部內容。我檢查是否與高度圖碰撞的方式是找出我的角色垂直對齊哪個三角形,使用這些三角形的頂點計算每個三角形所在平面的方程,然後插入將字符的x,z座標轉換爲平面方程並求解y。這給出了地圖中特定點的高度。 – 2011-04-15 22:16:18

+0

現在我的地形是隨機生成的(我提到它是2d)。我可以做很多和你所說的一樣的事情,除非我只能用x來解決y。我看到的問題是,我的地形也是可變形的......呃,與這個結合起來並不會很有趣。每當我變形地形時,我都需要重新計算這個計劃,對嗎? – 2011-04-15 22:45:04

2

你可能也想嘗試Nvidia PhysX,除了它的名字所暗示的那些(你想要模擬汽車物理學是我想到的),還有很多功能暴露在某些實用程序中,例如碰撞檢測,四元數學等。

我將它與Ogre,一個開源圖形引擎(到目前爲止; - )......在OpenGL-DirectX和Linux-Microsoft之間切換相對簡單)這也有很多內幕。

既然你已經知道如何編寫代碼,我會建議上述作爲可行的,而不是替代品,但開放性的來源;所以你只能重新發明你想要的輪子的部分。