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