【问题标题】:Slow Skscene transition缓慢的 Skscene 过渡
【发布时间】:2016-07-27 00:19:21
【问题描述】:

我有两个场景:Home 和 Play。与过渡到家庭场景相比,播放场景的过渡确实很慢。我认为这是因为在我的游戏场景中发生了更多的事情。有什么办法可以预加载播放场景吗?还是让过渡更加无缝?

我对这个论坛的答案很感兴趣Preload a Scene to prevent lag? 但我不知道从哪里开始。我在哪里放置答案的 A 和 B 部分

这是我正在使用的

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


    }    

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

谢谢

【问题讨论】:

    标签: ios iphone swift sprite-kit xcode7


    【解决方案1】:

    我这样做并且工作: 在 HomeScenedidView 中输入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))
                })
    
            })
        }
    

    【讨论】:

    • 您好,感谢您的回复。我为 swift 3 尝试了这个,但它不起作用。你能更新你的答案吗?
    • 它给了我一个错误“游戏配置没有成员级别”。
    • @Yraw 当然,那是我的游戏场景,gameConfiguration 级别是我的结构,名称为级别,将您的游戏场景与您的场景名称放在 gameviewcontroller 中,可能是 GameScene(fileNamed:"GameScene")跨度>
    猜你喜欢
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    相关资源
    最近更新 更多