缓慢的Skscene过渡

我有两个场景:家庭和游戏。 与过渡到家庭场景相比,过渡到场景的速度非常慢。 我想这是因为在我的游戏场景中有更多的讨价还价。 有什么方法可以预先加载游戏场景吗? 或者使过渡更加无缝?

我对这个论坛中的答案感兴趣预加载场景以防止滞后? 但我不知道从哪里开始。 我在哪里放置答案的A部分和B部分

这是我正在使用的

override func touchesBegan(touches: Set, 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)])) } 

任何其他解决方案都可以。

谢谢

我这样做并且有效:在HomeScene的didView中放置preloadGameScene()并且总是在家庭场景中:

 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()由按钮个人SKButton类调用:

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

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