2017-03-26 2 views
2

SKEmitterNodeSKScene에서 실행 중이며 입자를 중단하지 않고 다음 SKScene으로 옮기고 싶습니다.새 SKScene에 추가 할 때 SKEmitterNode가 사라짐

일반적으로 내가 좋아하는 그것을 할 것 다음 다음 SKScene에 다음

let scene: SKScene = GameScene(size: self.size) 
let transition = SKTransition.crossFade(withDuration: 0.5) 
self.view!.presentScene(scene, transition: transition) 

그리고이이 상황에서 그러나 완벽하게 잘 작동

override func didMove(to view: SKView) { 
    particleEmitter.removeFromParent() 
    addChild(particleEmitter) 
} 

내가 사용하지 않으을 다음 SKScene으로 이동할 때 전환. 내가 좋아하는 전환없이 시도했다 :

let scene: SKScene = GameScene(size: self.size) 
self.view!.presentScene(scene) 

그리고 SKEmitterNode 새로운 SKScene 내가 마지막 SKScene에서 그것을 제거하고 새로운 하나를 자녀로 추가 한 경우에도 발표되는 즉시 사라집니다.

내 질문에 SKEmitterNode이 왜 사라졌으며 SKScene 's 사이의 전환을 사용하지 않고 어떻게 작동시킬 수 있습니까? 어떤 도움을 주셔서 감사합니다, 감사합니다.

참고 : 지속 시간 0의 SKTransition을 사용하면 작동하지만 전환하는 동안 눈에 띄는 '플래시'가 발생합니다.

답변

2

깜박임 등이 없어야합니다. 내가 올바르게 당신을 이해한다면, 당신이해야 할 일은 전 지구 적 범위에서 이미 터를 만드는 것입니다. 다음 장면을 제시하기 전에 이미 터를 부모로부터 제거해야합니다. 다음 장면에있을 때 이미 터를 추가합니다. 방금 시도하고 어떤 지연, 플래시 또는 뭔가없이 나를 위해 작동합니다. 여기

는 ... 두 장면이있다 ... 코드 인 GameScene :

import SpriteKit 

let emitter = SKEmitterNode(fileNamed: "Fireflies") 

class GameScene: SKScene { 

    override func didMove(to view: SKView) { 

     backgroundColor = .black 

     if let emitterNode = emitter { 

      addChild(emitterNode) 
     } 
     print("Game Scene") 

    } 

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 

     if let scene = WelcomeScene(fileNamed: "WelcomeScene") { 

      scene.scaleMode = .aspectFill 

      emitter?.removeFromParent() 

      self.view?.presentScene(scene) 
     } 
    } 
} 

WelcomeScene : 나는 표준 반딧불 템플릿을 사용했습니다 이미 터를 들어

import SpriteKit 

class WelcomeScene:SKScene{ 

    override func didMove(to view: SKView) { 

     backgroundColor = .black 
     print("Welcome Scene") 
     if let emitterNode = emitter { 
      addChild(emitterNode) 

     } 
    } 

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 

     if let scene = GameScene(fileNamed: "GameScene") { 

      scene.scaleMode = .aspectFill 
      emitter?.removeFromParent() 
      self.view?.presentScene(scene) 
     } 

    } 
} 

.

+0

도움을 주셔서 감사합니다. 이것은 정확하게 원래 시도한 것이고 나에게는 효과가 없었습니다. 그 말은 내가 방금 다시 시도했는데 (원래 코드의 주석을 제거했다.) 갑자기 제대로 작동했다 ... 나는 올바르게 고쳐 주겠다. 고마워. – jm1175

+0

@ jm1175 어쩌면 다른 것이 지연의 원인이었을 것입니다. 여러분은 텍스처 등으로 스프라이트를 초기화하는 것을 알고 있습니다. 어쨌든, 그것을 듣고 다행 당신을 위해 일했다! :) 해피 코딩. – Whirlwind

관련 문제