2013-10-19 66 views
1

在我的主要更新函數中,我正在檢查控制器輸入,更新遊戲角色和處理碰撞。我的主要更新功能目前看起來像:主要更新順序

// Handle Character/Terrain collision 
foreach (ICharacer character in this.CharacterList) 
    foreach(ITerrain terrain in this.TerrainList) 
     HandleCollision.FixCollision(character, terrain) 

// Get controller input 
foreach (IController controller in this.ControllerList) 
    controller.GetAction(); 

// Update characters 

這一切的偉大工程,但我注意到,當我切換順序,使控制器輸入衝突處理前檢查,人物沉入地下。

controller.GetAction()方法是一系列if語句和命令檢查被按下的按鈕。如果沒有按鈕被按下,它什麼也不做。

我想知道爲什麼這個順序很重要,特別是當controller.GetAction()什麼都不做。如果你願意,我很樂意添加更多的代碼。

+0

看來,當你在碰撞處理之前檢查控制器輸入時,你的「世界」在那個時候沒有碰撞器,因爲你正在銷燬並創建它們的每個更新週期。 – pinckerman

回答

1

如果我是正確的,你正在使用某種線衝突(如果你的角色的底部接觸你的人類的頂部)而不是盒子碰撞。在這種情況下,像在圖像的左側發生,人物掉下來。但是如果你使用箱子碰撞(圖像的右側),角色將與地形碰撞。並通過計算他跌倒的深度,您可以在繪製之前將角色置於地形的頂部。

即使您在檢查碰撞之前按下5次按鈕,它的框仍然會變形。

enter image description here

我希望這會幫助你。