使用SpriteKit场景编辑器设计复杂对象

时间:2018-02-14 19:56:13

标签: ios swift sprite-kit skphysicsjoint

我可以说,在场景编辑器中没有办法添加物理关节。是吗?

考虑一个简单的人物,身体,儿童腿和手臂关节。如果我想在场景编辑器中设计这个人,然后以编程方式将他添加到场景中,我就不会走得太远。我能够在场景中找到节点,将它们从父节点中删除,并将它们作为子节点添加到场景中的新位置,但我仍然必须手动指定所有节点。

思想?

1 个答案:

答案 0 :(得分:1)

这是我的解决方案。我仍然希望有一种方法可以用场景编辑器创建物理关节,但我还没有找到它...

步骤1)将所有子节点添加到场景中,确保对象按父级分组。

Parent Node Location

步骤2)为复杂节点定义一个swift类。

class MyNode : SKSpriteNode {     
    func spawn(parentNode: SKNode, position: CGPoint) {
      parentNode.addChild(self) // before physics joints
      let arm = self.childNode(withName:"arm")
      // note if you didn't add physics bodies in scene file
      // do that first
      let shoulders = SKPhysicsJointPin.joint(withBodyA:self.physicsBody!, bodyB:   arm.physicsBody!, anchor: CGPoint(x:position.x,y:position.y-1))

      scene!.physicsWorld.add(shoulders)

      // feature of pulling a child from a scene, it's always paused by default.
      self.isPaused = false
    }
}

在场景中设置身体节点​​的类。

Custom Class

步骤3)在初始时将节点转移到游戏场景。

let tmpScene = SKScene.init(fileNamed: "MyNode.sks")
var myNode = tmpScene.childNamed(withName:"myNode") as! MyNode
myNode.removeFromParent()
myNode.spawn(world, position) // or your own parent and position as needed for your scene