Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift SpriteKit-如何使用计时器切换到新场景_Swift_Timer_Sprite Kit_Transition_Scene - Fatal编程技术网

Swift SpriteKit-如何使用计时器切换到新场景

Swift SpriteKit-如何使用计时器切换到新场景,swift,timer,sprite-kit,transition,scene,Swift,Timer,Sprite Kit,Transition,Scene,我目前正在尝试在我的SpriteKit游戏中构建一个加载场景,上面有我的开发者徽标,需要在5秒后转换到MainMenuScene。我该怎么做呢 我现在的代码看起来像这样,基本上只是背景/徽标图像 import SpriteKit class LoadingScene: SKScene { override func didMove(to view: SKView) { let background = SKSpriteNode(imageNamed: "fatscoprion")

我目前正在尝试在我的SpriteKit游戏中构建一个加载场景,上面有我的开发者徽标,需要在5秒后转换到MainMenuScene。我该怎么做呢

我现在的代码看起来像这样,基本上只是背景/徽标图像

import SpriteKit

class LoadingScene: SKScene {

override func didMove(to view: SKView) {

    let background = SKSpriteNode(imageNamed: "fatscoprion")
    background.position = CGPoint (x: self.size.width / 2, y: self.size.height / 2)
    background.zPosition = -1
    self.addChild(background)
   }
}

您可以创建一个定时计时器,并配置一个函数来调用创建和呈现新场景的方法

例如:

class LoadingScene: SKScene {
    var timer = Timer()

    override func didMove(to view: SKView) {
        let background = SKSpriteNode(imageNamed: "")
        background.position = CGPoint (x: self.size.width / 2, y: self.size.height / 2)
        background.zPosition = -1
        self.addChild(background)
        //Create a Scheduled timer thats will fire a function after the timeInterval
        timer = Timer.scheduledTimer(timeInterval: 5.0,
                                     target: self,
                                     selector: #selector(presentNewScene),
                                     userInfo: nil, repeats: false)
    }

    @objc func presentNewScene() {
        //Configure the new scene to be presented and then present.
        let newScene = SKScene(size: .zero)
        view?.presentScene(newScene)
    }

    deinit {
        //Stops the timer.
        timer.invalidate()
    }
}

我根本不建议这样做。如果在加载场景中接到一个电话,那么在转换到MainMenuScene之前需要加载一些资源时,就会遇到问题,因此这并不是最好的选择。最好创建一个方法来加载资源,并完成屏幕的转换。但是,如果您只需要显示一个标准屏幕并保持5秒钟而不进行任何其他操作,则调度程序就足够了。调度程序还不够,因为如果在启动屏幕发生时接到呼叫,则计时器可能会失火,或者您可能会以暂停状态呈现场景。一般的经验法则是永远不要在Sprite Kit中使用计时器。你是在构建一个实际的加载场景,还是只想显示你的徽标5秒钟?您可以使用Launch.xib。如果xib不够长,您可以使用主情节提要添加一个处理徽标的视图,除非绝对必要,否则不需要sprite工具包。