目前,我使用SKPhysicsContact从GameScene中触发我的精灵的行为更改。问题在于每次开发,游戏场景变得越来越长。有没有人设法在其中嵌入了SKPhysics的GKComponent,使联系人管理变得更简单?这将如何运作?
答案 0 :(得分:1)
由于单点调度(物理世界的联系代表),碰撞处理很难在实体组件架构中很好地处理。但是您可以使用该点来整理所涉及的实体并将联系人消息分发到正确的组件。
Apple的DemoBots sample code有一个例子。以下是他们如何做到这一点的快速摘要:
需要联系处理的SK节点使用特殊的子类EntityNode
,它为节点的拥有实体(GKEntity
或某个子类)添加了一个反向引用。
在didBeginContact
中,弄清楚联系人是否需要处理以及由谁处理。 DemoBots通过创建一个ColliderType
结构来实现这一点,该结构有助于将位掩码抽象为“类型A是否想要与类型B冲突/通知联系人?”各种问题。
在决定要通知的人之后,计算出碰撞精灵的拥有实体/组件并向其发送联系人消息。也就是说,您的自定义实体或组件类应定义自己的联系处理消息。
DemoBots使用一堆自定义实体类并处理每个类中的联系人。你也可以使用更少的实体类,并处理组件中的联系人 - 在这种情况下,上面的步骤3将涉及在碰撞实体上查找ContactComponent
(或任何你称之为的)并向它们发送消息