在Swift中将多个节点作为一个节点

在Swift中将多个节点作为一个节点,swift,swift3,xcode8,skspritenode,Swift,Swift3,Xcode8,Skspritenode,我试图创建一个简化的马里奥博士式游戏,其中我有一个药丸形状的物体,每一半都有自己的颜色 这些药片可以堆叠在一起,我需要通过碰撞检测来确定两种相似颜色是否发生碰撞 我试过的 我创建了一个SKSpriteNode子类,在这个子类中,我生成了一半带有颜色的药丸,并在场景中生成了两个。我将它们放置在彼此相邻的位置,并在它们之间创建了一个固定接头。问题是我不能像旋转单个节点一样旋转它们() 我创建了两个SKSpriteNode子类。第一个类似于上面的一个,返回半个pill,但不是从场景中调用,而是从第二个

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

这些药片可以堆叠在一起,我需要通过碰撞检测来确定两种相似颜色是否发生碰撞

我试过的
  • 我创建了一个
    SKSpriteNode
    子类,在这个子类中,我生成了一半带有颜色的药丸,并在场景中生成了两个。我将它们放置在彼此相邻的位置,并在它们之间创建了一个固定接头。问题是我不能像旋转单个节点一样旋转它们()

  • 我创建了两个
    SKSpriteNode
    子类。第一个类似于上面的一个,返回半个pill,但不是从场景中调用,而是从第二个子类中调用,第二个子类将pill作为单个节点返回到场景中。在这个场景中,旋转是有效的,但我不知道如何在它们之间创建关节并从场景外部将该关节添加到物理世界


  • 不管怎样,我的两个解决方案似乎都不好。如何创建pill对象?

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

    enum PillColor {
      case red
      case blue
      case yellow
    }
    
    class Pill: SKSpriteNode { 
      var rightSide: PillColor?
      var leftSide: PillColor?
      var rotation: Int
    }
    

    skphysicaccontactdelegate
    didbeagin(contact)
    方法中,您可以使用
    skphysicaccontact
    contactPoint
    属性来了解这两个属性在何处实际相遇

    我只需要创建一个SKNode子类,在pill的左半部分和右半部分使用两个SKSpriteNode引用,并将这两个sprite节点作为子节点添加

    像这样的

    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!)
        }
    }
    

    我使用了两个节点,以便在碰撞时销毁其中一个节点,而将另一个节点作为单个节点。如果我只有一个节点,我能通过缩放动画将这两个节点分开并移除其中一个吗?是的,在碰撞时,我会调整节点及其物理体的大小,并将该侧设置为
    nil