Playground輸出的代碼 ,注意右側打印出的SpriteNode輸出值,HAPPY_NODE的輸出信息一致.node
//MARK:- 擴展SkSpriteNode屬性 extension SKSpriteNode { func copyWithPhysicsBody()->SKSpriteNode{ let spriteNode = self.copy() as! SKSpriteNode spriteNode.physicsBody = self.physicsBody return spriteNode } }
那麼咱們爲什麼要進行節點的複製呢?WHY? WHY? WHY?
spa
由於咱們須用節點spritenode.copy()把其它Scene(CircleScene.sks)裏的節點拷貝一份,並把拷貝的這一份節點加到當前的scene(GameScene.sks)裏,還有一個重要的注意點,就是若是要在GameScene.sks取得 Overlay內的紅色節點的準確座標,須用convert把copy到fgNode的節點上的紅色節點座標轉爲GameScene的座標(let pos = fgNode.convert(sprite.position, from: sprite.parent!)
),好像有點兒深奧,其實不復雜的,具體查看如下代碼;code
//取得CircelScene.sks上的Overlay節點 var circleAcross: SKSpriteNode! let overlayScene = SKScene(fileNamed: "CircelScene.sks")! let overlayNode = overlayScene.childNode(withName: "Overlay") circleAcross = overlayNode
//複製一份節點的拷貝,並加在fgNode節點上 let initialPlatform = circleAcross.copy() as! SKSpriteNode fgNode.addChild(initialPlatform)
//取得CircelScene.sks上內的Overlay節點的子節點名稱爲 "red"的全部節點 animateCoinsInOverlay(overlayNode) func animateCoinsInOverlay(_ overlay: SKSpriteNode) { overlay.enumerateChildNodes(withName: "*", using: { (node, stop) in if node.name == "red" { node.run(SKAction.repeatForever(self.coinSpecialAnimation)) } else { node.run(SKAction.repeatForever(self.coinAnimation)) } }) }
//節點發生碰撞時 didBegin(:)添加節點的特效,須用convert把子節點座標coordinate轉到fgNode的座標上 func emitParticles(name: String, sprite: SKSpriteNode) { // name 發生碰撞的特效名稱; // sprite 發生碰撞的的節點 ,如"red"圓形節點; // sprite.parent 爲overlay // fgNode.convert 把coin在cicleScene.sks的座標轉爲fgNode上的座標 let pos = fgNode.convert(sprite.position, from: sprite.parent!) let particles = SKEmitterNode(fileNamed: name)! particles.position = pos particles.zPosition = 3 fgNode.addChild(particles) }
更多遊戲教學:http://www.iFIERO.comorm