2013-03-29 80 views
1

首先,我想說的是我的問題更多的是關於設計一個比遊戲開發更好的面向對象的系統。我正在製作太空射擊遊戲,有子彈,敵人,大石塊和太空船(玩家)等物體。我有一個碰撞管理器(靜態類),每個幀檢查碰撞。爲了從子彈到飛船或敵人我這樣做傳「效果」:碰撞管理器中的遊戲對象之間的關係

Interface IHit 
{ 
    Action<BaseGameSprite> GetEffect(); 
} 

*例如子彈類我做:

return new Action<ICollisionInterest>(gameobject => 
       { 
        gameobject.LifePoints -= Damage; 


       }); 

,並在碰撞經理,如果他發現了衝突

TheHitObject.GetEffect()(HittenObject); 

解決方案的工作,但我不知道這是否是一個好的設計,因爲GetEffect()完全打破封裝,似乎子彈可以做任何他想要的HittenOb ject(宇宙飛船,或敵人)。所以我的問題是:這是一個很好的設計?或者我應該使用不同的東西?

回答

2

恕我直言,據OO設計而言,我認爲設計很好。如果它是你的遊戲邏輯決定你的子彈對象可以做任何它想要擊中的對象,那爲什麼不呢?我沒有看到您列出的示例代碼中的不同類之間有任何緊密耦合,並且GetEffect()方法沒有對任何具體類進行假設,除非要求gameobject具有LifePoints屬性,您可能必須添加if語句來檢查如果gamobject確實有這個屬性。

1

您是否檢查過實體系統? http://entity-systems.wikidot.com/

它比面向遊戲開發的傳統面向對象設計提供了更好的體系結構。在一個實體系統中,每個遊戲對象都被表示爲一個只是一個id的實體。像渲染,碰撞檢測,計算健康等行爲不會封裝在實體中,而是表示爲可添加到實體的組件。實際的渲染,物理,健康點計算等由獨立子系統處理。每個子系統處理所有相同類型的組件忽略它們所屬的實體。通過這種方式,渲染,邏輯,物理,ai顯然是分開的。

有關學習的實體系統啓動,檢查出由T =機器編寫的經典3部分的文章: http://t-machine.org/index.php/2007/09/03/entity-systems-are-the-future-of-mmog-development-part-1/ (你可以在google的第2部分和第三部分)

+0

非常鼓舞人心的答案。我搜索了一下,並找到了一個與c#代碼示例有關的interresting文章:http://www.richardlord.net/blog/what-is-an-entity-framework – Larry

+0

感謝您提供的信息,但請您檢查我的設計不好,爲什麼。我知道它不如我將學習的實體系統好,但我必須知道它是否非常糟糕。 – Michael