0

目前,我使用 SKPhysicsContact 从 GameScene 中触发我的精灵的行为变化。问题是随着每次开发,游戏场景变得越来越长。有没有人设法制作一个嵌入了 SKPhysics 的 GKComponent 以简化联系人管理?这将如何工作?

4

1 回答 1

1

由于单点调度(物理世界的联系委托),在实体组件架构中很难很好地处理碰撞处理。但是您可以使用该点来整理涉及的实体并将联系消息发送到正确的组件。

Apple 的DemoBots 示例代码就是一个例子。以下是他们如何做到这一点的快速总结:

  1. 需要联系处理的 SK 节点使用一个特殊的子类 ,EntityNode它添加了对节点拥有实体(GKEntity或某些子类)的反向引用。

  2. didBeginContact中,整理联系人是否要处理以及由谁处理。DemoBots 通过创建一个ColliderType结构来实现这一点,该结构有助于将位掩码抽象为“A 类型是否想要与 B 类型碰撞/通知联系人?” 各种问题。

  3. 在决定通知谁之后,计算出碰撞精灵的拥有实体/组件并向它们发送联系消息。也就是说,您的自定义实体或组件类应该定义自己的联系人处理消息。

DemoBots 使用一堆自定义实体类并在每个实体类中处理联系人。你也可以使用更少的实体类,并在一个组件中处理联系人——在这种情况下,上面的第 3 步将涉及在碰撞实体上查找ContactComponent(或任何你称之为的)并向它们发送消息。

于 2016-01-15T19:38:14.867 回答