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

Posted

技术标签:

【中文标题】使用 SpriteKit 场景编辑器设计复杂对象【英文标题】:Designing complex objects with SpriteKit Scene Editor 【发布时间】:2018-02-14 19:56:13 【问题描述】:

据我所知,没有办法在场景编辑器中添加物理关节。对吗?

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

想法?

【问题讨论】:

【参考方案1】:

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

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

步骤 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
    

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

第 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

【讨论】:

以上是关于使用 SpriteKit 场景编辑器设计复杂对象的主要内容,如果未能解决你的问题,请参考以下文章

子类化使用 SpriteKit .sks 场景文件创建的 SKNode

如果使用编辑器中的场景加载,如何在 SpriteKit 中检测触摸

在 SpriteKit 中添加到父级时未显示未归档节点

Xcode,SpriteKit:旋转整个场景,编辑数组内精灵的属性

Sprite Kit 场景编辑器 GameScene.sks 场景宽度和高度

如何访问 SpriteKit 场景编辑器参考节点上自定义类中包含的 Swift 中的变量?