我試圖圍繞遊戲實體系統和使用GamePlayKit。 我有以下情形掙扎:GKEntity應該具有訪問組件功能的屬性或方法嗎?
RenderComponent
是GKComponent
引用了SKSpriteNode
顯示我的實體。MetaDataComponent
是保存關於實體的各種信息片段的另一個組件(如在我的情況下,這將包含屬性像MapX
,MapY
,...)
我有一個CharacterEntity
從GKEntity
派生。
要初始化我的實體,我傳遞用於精靈的紋理名稱。這使我可以創建RenderComponent
。
要初始化MetaDataComponent
我有三個選項,我想知道他們中的一個是否被認爲是最佳實踐(以及哪一個是最差實踐)?
- 對於我的組件每個屬性,參數添加到在
Character
類init()
- 公開屬性將更新組件的屬性。
- 將模型對象傳遞給我的實體並從中初始化組件。
我的想法:
- 數1:將多個組件我的實體擁有,更PARAMS我得到...這是不是真的我的偏好。
- 數字2:一個實體應該是「愚蠢的」,不攜帶任何數據。它是最純粹的形式,一個實體只是一個數字。在那裏添加道具「感覺」錯誤。
- 編號3:像我這樣的模型對象像
MetaData
感覺最好,但也是多餘的,因爲數據然後在模型對象中的組件和中。也許讓組件存儲模型對象而不是它的屬性?
舉另一個例子:如果我期望一個實體有一個RenderComponent
,我可以查詢該組件並使用它。或者我可以向實體本身添加一個方法,如setRenderPosition
,它檢查所需組件的存在並更新它。問題的另一個問題是,這樣做是否存在正確或錯誤?
優秀的問題。這是蘋果遊戲WIP的「被遺忘」框架,就像CAKeyFrameAnimation是被遺忘的蘋果平臺上的動畫製作手段一樣。 – Confused