将 SKPhysicsContact 放置在 GKComponent 中

Placing SKPhysicsContact within a GKComponent

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

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

Apple 的 DemoBots sample code 有一个这样的例子。以下是他们如何做的简要总结:

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

  2. didBeginContact中,整理联系人是否需要处理以及由谁处理。 DemoBots 通过创建一个 ColliderType 结构来实现这一点,该结构有助于将位掩码抽象为 "does type A want to collide / notify contacts with type B?" 种问题。

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

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