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

时间:2017-03-21 22:33:05

标签: swift swift3 xcode8 skspritenode

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

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

我尝试了什么

  1. 我创建了一个SKSpriteNode子类,我用它的颜色生成了一半的药丸,并在我的场景中产生了两个。我把它们放在彼此附近并在它们之间建立了一个固定的关节。问题是我无法将它们旋转为好像它们是一个节点(there's an open question regardin this issue

  2. 我创建了两个SKSpriteNode子类。第一个就像上面一个,返回半个药丸,但不是从场景中调用,而是从第二个子类调用它们,它将丸作为单个节点返回到场景中。在这种情况下,旋转工作,但我无法弄清楚如何在它们之间创建一个关节,并从场景外部将该关节添加到physicsWorld。

  3. 无论哪种方式,我的解决方案都不合适。你会如何创造药丸对象?

2 个答案:

答案 0 :(得分:1)

我不打算为该对象提供两个节点。毕竟颜色只是纹理。我将创建一个SKSpriteNode子类,一个physicsBody并将其余的存储为属性。然后在碰撞时,你会对边和颜色以及旋转进行计算。

enum PillColor {
  case red
  case blue
  case yellow
}

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

SKPhysicsContactDelegate的{​​{1}}方法中,您可以使用didBegin(_ contact)的{​​{1}}属性来了解两者实际相遇的位置。

答案 1 :(得分:1)

我只想创建一个SKNode子类,其中两个SKSpriteNode引用到药丸的左半部分和右半部分,并将这两个精灵节点添加为子项。

像这样。

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