2010-01-14 103 views
1

我正在製作類似Castle Crashers的側卷軸,現在我正在使用SAT進行碰撞檢測。這很好,但我想通過允許對象在屏幕上上下移動來模擬水平「深度」,基本上沿着Z軸(如此屏幕截圖http://favoniangamers.files.wordpress.com/2009/07/castle-crashers-ps3.jpg)。這不是等距遊戲,而是使用視差滾動。在2D側卷軸中實現z軸

我在向量類中添加了一個z分量,我計劃根據形狀的「厚度」來挑選碰撞,它是z位置。我只是不確定如何計算渲染形狀的位置或如何用重力添加跳躍。我如何計算z位置變化時的最大y值(對於地面)?基本上是z和y軸的關係讓我困惑。

如果有人知道這個話題,我會很感激鏈接資源。

謝謝!

回答

4
  1. 實際上可以使您的碰撞檢測算法在尺寸上不可知。只需要一個沿一個維度工作的碰撞檢測器,使用它來檢查每個維度,而您對「這些碰撞與否」的回答是沿着每個維度的碰撞檢測的邏輯與。

  2. 您的遊戲應該組織起來,以保持遊戲對象的交互性,並將遊戲的渲染完全分離到屏幕上。您可以將程序的這兩部分看作「模型」和「視圖」。在模型中,你有一個完整的三維世界,3軸。沒有一定程度的痛苦,你無法在這一點上達到一半。你的模型必須是適當的3D。

該視圖將讀取所有遊戲對象的位置,並使用相機定義將它們投影到屏幕上。對於這部分你不需要一個完整的3D渲染引擎。對於你所說的視角而言,正確的技術術語是「傾斜的」,可以在許多古代中國和日本的卷軸畫和版畫中看到 - 特別是尋找「源氏物語」的圖像。

物體的屏幕位置(包括地面!)是這樣的:

DEPTH_RATIO=0.5; 
view_x=model_x-model_z*DEPTH_RATIO-camera_x; 
view_y=model_y+model_z*DEPTH_RATIO-camera_y; 

可以爲直正投影正投影修改:

DEPTH_RATIO=0.5; 
view_x=model_x-camera_x; 
view_y=model_y+model_z*DEPTH_RATIO-camera_y; 

當然不要忘了撲殺相機所限定的體積之外的對象。

您也可以使用此機制來爲您處理視差圖層的位置。當然,這是一個改變你的相機的問題,而不是一個正交投影的1點透視投影。你不必使用它來改變精靈的渲染大小,但它可以幫助你逼真地管理對象的x位置。如果你面臨挑戰,你甚至可以混合使用投影 - 對於深層背景使用1點透視,對前景使用正字法。

+0

很好的答案布列塔尼。我現在全部解決了。謝謝您的幫助! – 2010-01-15 21:40:19

1

您應該將您物理計算(碰撞檢測等)所使用的概念Y軸與實際在屏幕上繪製的Y軸分開。這樣它就不那麼容易混淆了。

只要做到按正常假裝計算有Y和Z軸之間沒有任何關係,然後當你真正吸引你模擬使用Y軸Z軸的屏幕上的對象:

screen_Y = Y + Z/some_fudge_factor; 

其實,這是真正的3D引擎如何工作。世界所有計算完成後,X,Y和Z座標通過函數映射到screen_X和screen_Y上(通常比上面的方程稍微複雜一些,但只是一點點)。例如,要在遊戲中實現僞等角視圖,您甚至可以將Z應用於screen_X軸,以便物體對角線位移而不是垂直移動。

+0

增加了進一步的說明。 – slebetman 2010-01-14 23:35:12

+0

謝謝slebetman,我肯定會把圖畫和碰撞模擬搞混。 – 2010-01-15 21:37:38