2017-02-11 72 views
1

對於我的遊戲,我使用狀態模式來處理我的屏幕。屏幕需要更新和渲染每一幀。遊戲循環在Game類中。遊戲開發 - 更新方法和狀態模式

但我也需要在實體類中的更新和渲染方法。我應該在屏幕和實體類(例如FrameProcess)中使用接口嗎?或者我可以像這樣離開它(見圖)?

面向對象的最佳實踐是什麼?這有什麼模式嗎?

這個問題的基本UML:

enter image description here

+0

其用法示例(或多個)以非常明確的方式,如果得到的實體會發生什麼,你從屏幕遞給你的遊戲對象,而不是GameScreen實體或MenuScreen? –

+0

是的,有一種狀態機的模式,我甚至爲此提供了一個抽象[framework](http://makulik.github.io/sttcl/)。 –

+0

@DanielT。我想在我的遊戲中擁有不同的屏幕。標題屏幕,菜單屏幕和遊戲屏幕。而在我的GameScreen中,我將擁有包含玩家,敵人等實體的關卡。 – Liddelfranks

回答

1

我會爲Entity類中的update()render()方法創建純虛函數,並讓從它繼承的類定義它們自己的行爲,這將允許系統以多態方式行爲。然後在Game類或一些其他類型的處理程序類調用update()draw()方法基於系統的當前狀態,使用狀態模式決定它。

順便說一句,它告訴更多的國家模式,在http://gameprogrammingpatterns.com/state.html

1

這取決於你所說的 「實體」 在這方面的意思。如果一個實體覆蓋可呈現和可更新的所有內容,爲兩者創建一個虛擬函數都可以(如果您計劃派生其他類型的實體,如車輛或武器)。如果你有除Entity以外的其他可渲染和可更新的類型,在我看來,一個界面會是更好的選擇。

您可能還有更好的選擇https://gamedev.stackexchange.com/以獲取更多Q & A關於gamedev。

+0

實體是抽象的,因此必須已經可以推導出來。 –