Swift 中的多个 SKSpriteNode 作为一个节点

Multiple SKSpriteNodes as one Node in Swift

我正在尝试创建一个类似马里奥博士的简化游戏,其中我有一个药丸形状的物体,每一半都有自己的颜色。

药丸可以堆叠在一起,我需要通过碰撞检测找出两种相似颜色是否发生碰撞。

我试过的

  1. 我创建了一个 SKSpriteNode 子类,我在其中生成了一半带有颜色的药丸,并在我的场景中生成了两个。我将它们彼此靠近放置,并在它们之间创建了一个固定关节。问题是我无法将它们当作单个节点来旋转 (there's an open question regardin this issue)

  2. 我创建了两个 SKSpriteNode 子类。第一个就像上面的那个,返回半个药丸,但不是从场景中调用,而是从第二个子类中调用,returns 药丸作为单个节点进入场景。在这种情况下,旋转有效,但我不知道如何在它们之间创建关节并将该关节从场景外部添加到物理世界。

不管怎样,我的两种解决方案似乎都不行。您将如何创建药丸对象?

我不会为对象设置两个节点。颜色毕竟只是质地。我会创建一个 SKSpriteNode 子类,一个 physicsBody 并将其余的存储为属性。然后在碰撞时你做侧面和颜色和旋转的计算。

enum PillColor {
  case red
  case blue
  case yellow
}

class Pill: SKSpriteNode { 
  var rightSide: PillColor?
  var leftSide: PillColor?
  var rotation: Int
}

SKPhysicsContactDelegatedidBegin(_ contact) 方法中,您可以使用 SKPhysicsContactcontactPoint 属性 来了解两者实际相遇的位置。

我会创建一个 SKNode 子类,其中包含两个 SKSpriteNode 引用,分别指向 pill 的左右两半,并将这两个精灵节点添加为子节点。

像这样。

class Pill: SKNode {
    var left: SKSpriteNode?
    var right: SKSpriteNode?

    func setup() {
        left = SKSpriteNode()
        /* Setup left half of the pil */
        addChild(left!)

        right = SKSpriteNode()
        /* Setup right half of the pil */
        addChild(right!)
    }
}