SpirteKit 깊이 복사 SKSpriteNode 노드 및 convert 다른 Scene의 노드를 현재 장면 좌표로 변환

Playground 출력 코드, 오른쪽에 출력된 SpriteNode 출력 값, HAPPY 주의NODE의 출력 정보가 일치합니다.
//MARK:-   SkSpriteNode  
extension SKSpriteNode {
  func copyWithPhysicsBody()->SKSpriteNode{
    let spriteNode = self.copy() as! SKSpriteNode
    spriteNode.physicsBody = self.physicsBody
    return spriteNode
  }
}

그렇다면 우리는 왜 노드의 복제를 진행해야 합니까?WHY? WHY? WHY?
왜냐하면 우리는 노드spritenode를 사용해야 하기 때문이다.copy () 는 다른 Scene (Circle Scene.sks) 의 노드를 한 부 복사하고, 복사한 이 노드를 현재 Scene (Game Scene.sks) 에 추가합니다. 중요한 주의점은 Game Scene입니다.sks는 Overlay 내의 빨간색 노드의 정확한 좌표를 얻으려면 convert로 fgNode의 노드에 있는 빨간색 노드 좌표를 게임Scene의 좌표(let pos = fgNode.convert(sprite.position, from: sprite.parent!)로 바꾸어야 한다. 약간 심오한 것 같지만 사실은 복잡하지 않다. 구체적으로 아래 코드를 살펴보자.
//  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.com

좋은 웹페이지 즐겨찾기