2017-03-26 14 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の間の移行を使用せずにどのように動作させることができるのですか。どんな助けでも大変感謝します。

注:継続時間が0のSKTransitionを使用すると動作しますが、これはトランジション中に顕著な「フラッシュ」を引き起こします。

答えて

2

点滅などはありません。私があなたを正しく理解していれば、グローバルスコープでエミッタを作成する必要があります。次のシーンを表示する前に、親からエミッタを削除する必要があります。あなたが次のシーンにいるとき、それにエミッタを追加します。私はちょうど試してみたが、遅れたり、フラッシュしたりすることなく私のために働く。

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) 
     } 

    } 
} 

私は、標準的なホタルのテンプレートを使用しましたエミッタのためにここで

がコードです... 2つのシーン... GameSceneがあります。

+0

助けてくれてありがとう、これは私が元来しようとしていたもので、それは私のために働いていませんでした。それは私がもう一度試したと言われています(文字通り元のコードのコメントを外しただけです)、突然うまくいきます。 – jm1175

+0

@ jm1175多分、何かが遅れの原因でした。あなたは、テクスチャなどによるスプライトの初期化を知っています。とにかく、それがあなたのために働いて聞いてうれしい! :)ハッピーコーディング。 – Whirlwind

関連する問題