我正在尝试围绕游戏实体系统并使用 GamePlayKit。我在以下情况下苦苦挣扎:
RenderComponent
是一个GKComponent
引用一个SKSpriteNode
来显示我的实体。MetaDataComponent
是另一个包含有关实体的各种信息的组件(例如,在我的情况下,这将包含诸如MapX
,MapY
, ... 之类的属性)
我有一个CharacterEntity
源自GKEntity
.
为了初始化我的实体,我传递了用于精灵的纹理名称。这允许我创建RenderComponent
.
要初始化MetaDataComponent
我有三个选项,我想知道其中一个是否被认为是最佳实践(以及,哪一个是最差实践)?
- 对于我的组件中的每个属性,添加一个参数到
init()
- 在类中公开属性,
Character
这将更新组件的属性。 - 将模型对象传递给我的实体并从中初始化组件。
我的想法:
- 第 1 点:我的实体拥有的组件越多,我得到的参数就越多……这不是我的偏好。
- 第 2 点:一个实体应该是“愚蠢的”并且不携带任何数据。在最纯粹的形式中,实体只是一个数字。在那里添加道具“感觉”是错误的。
- 第 3 点:拥有像
MetaData
我这样的模型对象感觉最好,但也是多余的,因为数据在组件和模型对象中。也许让组件存储模型对象而不是其属性?
再举一个例子:如果我希望一个实体有一个RenderComponent
,我可以查询那个组件并使用它。或者我可以向实体本身添加一个方法,例如setRenderPosition
检查所需组件是否存在并更新它。再次的问题是,这样做是对还是错?