2016-07-27 6 views
1

Ich habe zwei Szenen: Home und Play. Der Übergang zur Spielszene ist im Vergleich zum Übergang in die Heimat sehr langsam. Ich denke, das liegt daran, dass es in meiner Spielszene mehr Hacken gibt. Gibt es eine Möglichkeit, die Spielszene vorzuladen? Oder den Übergang nahtloser gestalten?Slow Skscene Übergang

Ich bin interessiert an der Antwort in diesem Forum Preload a Scene to prevent lag? aber ich habe keine Ahnung, wo ich anfangen soll. Wo platziere ich einen Teil A und B der Antwort

Hier ist, was ich

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    let touch = touches 
    let location = touch.first!.locationInNode(self) 
    let node = self.nodeAtPoint(location) 

    if (node.name == "Balloon") { 

     let sceneAction = SKAction.runBlock({ 
      let secondScene = Scene2(size: self.size) 
      let transition = SKTransition.fadeWithDuration(1) 
      secondScene.scaleMode = SKSceneScaleMode.AspectFill 
      self.scene!.view?.presentScene(secondScene, transition: transition) 
     }) 
      PlayButton.runAction(SKAction.sequence([sound,SKAction.animateWithTextures(array, timePerFrame: 0.1),sceneAction,SKAction.waitForDuration(1)])) 


    }  

mit Jede andere Lösung ist in Ordnung.

Dank

Antwort

1

Ich tue dies und arbeitet: in didView von HomeScenepreloadGameScene() setzen und immer in der häuslichen Szene:

fileprivate var nextScene: SKScene? 

func preloadGameScene() { 
    let qualityOfServiceClass = QOS_CLASS_BACKGROUND 
    let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0) 
    dispatch_async(backgroundQueue, { 
     self.nextScene = GameScene(fileNamed:"yoursksfilename") 
     dispatch_async(dispatch_get_main_queue(), {() -> Void in 
      print("SCENE LOADED") 
      let loading = self.childNodeWithName("Loading") as? SKLabelNode 
      self.playButton?.hidden = false 
      self.playButton?.alpha = 0 
      //loading?.hidden = true 
      self.playButton?.runAction(SKAction.fadeAlphaTo(1.0, duration: 0.4)) 
      loading!.runAction(SKAction.fadeAlphaTo(0.0, duration: 0.4)) 
     }) 

    }) 
} 

goToGameScene() durch einen Knopf persönliche SKButton Klasse aufgerufen wird:

func goToGameScene() { 
     guard let nextScene = nextScene else {return} 
     let transition = SKTransition.crossFadeWithDuration(0.5) 
     nextScene.scaleMode = .AspectFill 
     scene!.view?.presentScene(nextScene, transition: transition) 
    } 

UPDATE SWIFT 3

fileprivate var nextScene: SKScene? 

func preloadGameScene() { 
     let qualityOfServiceClass = DispatchQoS.QoSClass.background 
     let backgroundQueue = DispatchQueue.global(qos: qualityOfServiceClass) 
     backgroundQueue.async(execute: { 
      self.nextScene = GameScene(fileNamed:"yoursksfilename") 
      DispatchQueue.main.async(execute: {() -> Void in 
       print("SCENE LOADED") 
       let loading = self.childNode(withName: "Loading") as? SKLabelNode 
       self.playButton?.isHidden = false 
       self.playButton?.alpha = 0 
       //loading?.hidden = true 
       self.playButton?.run(SKAction.fadeAlpha(to: 1.0, duration: 0.4)) 
       loading?.run(SKAction.fadeAlpha(to: 0.0, duration: 0.4)) 
      }) 

     }) 
    } 
+0

Hey danke für die Antwort. Ich habe dies für Swift 3 versucht und es funktioniert nicht. Können Sie bitte Ihre Antwort aktualisieren? – Yraw

+0

@Yraw überprüfen Sie das Update –

+0

Es gibt mir einen Fehler "Gameconfiguration hat keine Member Level". – Yraw