第一次场景之间的转换很慢

时间:2016-09-30 12:17:49

标签: ios swift sprite-kit

我试图在GameScene和SettingsScene之间移动,并且是第一次完美的工作。 在第一次游戏被“卡住”1-3秒并且在第一次过渡和游戏完美之后呈现了没有过渡的SettingsScene。 后面(在SettingsScene和GameScene之间)也是第一次运行良好。

GameScene与SettingsScene之间的转换代码

   override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    for touch: AnyObject in touches {
        self.removeAllActions()
        // Get the location of the touch in this scene
        let location = touch.location(in: self)
        // Check if the location of the touch is within the button's bounds
        //Play Button
        if PlayButton.contains(location) {
            bannerView.isHidden = true
            let newScene = PlayScene(size: (view?.bounds.size)!)
            newScene.scaleMode = .aspectFill
            let reveal = SKTransition.crossFade(withDuration: 1.0)
            self.view?.presentScene(newScene, transition: reveal)

            //Settings Button
        }else if SettingsButton.contains(location) {
            bannerView.isHidden = true
            settingsscene?.scaleMode = .resizeFill
            let reveal = SKTransition.push(with: SKTransitionDirection.down, duration: 0.7)
            self.view?.presentScene(settingsscene!, transition: reveal)
        }
    }
}

GameScene:

var settingsscene: SKScene?

override func didMove(to view: SKView) {
    /* Setup your scene here */

    //
    let size = self.size
    DispatchQueue.global(qos: DispatchQoS.QoSClass.background).async {
        [weak self] () -> Void in
        self?.settingsscene = SettingsScene(size: (view.bounds.size))
    }

SettingsScene:

override func didMove(to view: SKView) {

    //Settings Background
    settingsBackground.position = CGPoint(x: self.frame.width / 2, y: self.frame.height / 2)
    settingsBackground.zPosition = -1

}

override init(size: CGSize) {

    super.init()
    //Settings Label
    settingsLabel.text = "Settings"
    settingsLabel.fontName = "AvenirNext-Bold"
    settingsLabel.fontColor = UIColor.white
    settingsLabel.horizontalAlignmentMode = .center
    settingsLabel.verticalAlignmentMode = .center
    adjustLabelFontSizeToFitRect(labelNode: settingsLabel, rect: CGRect(x:self.frame.midX, y:self.frame.midY, width: 180, height: 110), center: true)
    settingsLabel.setScale(self.frame.width * 0.001)
    settingsLabel.position = CGPoint(x: self.frame.midX, y: self.frame.maxY - settingsLabel.frame.height)
    settingsLabel.zPosition = 1

    addChild(settingsLabel)
    /**** Labels ****/

    //Sounds Label
    soundsLabel.text = "Sounds"
    soundsLabel.fontName = "AvenirNext"
    soundsLabel.fontColor = UIColor.white
    adjustLabelFontSizeToFitRect(labelNode: soundsLabel, rect: CGRect(x:self.frame.midX, y:settingsLabel.position.y - 20, width:110, height: 70), center: true)
    soundsLabel.setScale(self.frame.width * 0.001)
    soundsLabel.zPosition = 1

    //Rate Label
    rateLabel.text = "Rate Game"
    rateLabel.fontName = "AvenirNext"
    rateLabel.fontColor = UIColor.white
    adjustLabelFontSizeToFitRect(labelNode: rateLabel, rect: CGRect(x:self.frame.midX, y:50, width:120, height: 110), center: true)
    rateLabel.setScale(frame.width * 0.001)
    rateLabel.zPosition = 1

    //Twitter Label (Follow me)
    twiterLabel.text = "Follow me"
    twiterLabel.fontName = "AvenirNext"
    twiterLabel.fontColor = UIColor.white
    adjustLabelFontSizeToFitRect(labelNode: twiterLabel, rect: CGRect(x:self.frame.midX, y:10, width:17, height: 110), center: true)
    twiterLabel.setScale(frame.width * 0.001)
    twiterLabel.zPosition = 1

    //iAP Label (Remove Ads)
    iapLabel.text = "Remove Ads"
    iapLabel.fontName = "AvenirNext"
    iapLabel.fontColor = UIColor.white
    adjustLabelFontSizeToFitRect(labelNode: iapLabel, rect: CGRect(x:self.frame.midX, y:70, width:40, height: 110), center: true)
    iapLabel.setScale(frame.width * 0.001)
    iapLabel.zPosition = 1

    //Restore iAP Label
    restoreLabel.text = "Restore Purchase"
    restoreLabel.fontName = "AvenirNext"
    restoreLabel.fontColor = UIColor.white
    adjustLabelFontSizeToFitRect(labelNode: restoreLabel, rect: CGRect(x:self.frame.midX, y:308, width:102, height: 110), center: true)
    restoreLabel.setScale(frame.width * 0.001)
    restoreLabel.zPosition = 1

    //About Label
    aboutLabel.text = "Restore Purchase"
    aboutLabel.fontName = "AvenirNext"
    aboutLabel.fontColor = UIColor.white
    adjustLabelFontSizeToFitRect(labelNode: aboutLabel, rect: CGRect(x:self.frame.midX, y:18, width:123, height: 312), center: true)
    aboutLabel.setScale(frame.width * 0.001)
    aboutLabel.zPosition = 1

    //Back Button
    backButton.position = CGPoint(x: self.frame.midX, y: self.frame.midY)
    backButton.zPosition = 1

}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

func SettingsSetup() {

    addChild(settingsBackground)
    addChild(myLabels)
    addChild(backButton)
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    for touch:AnyObject in touches {
        let location = touch.location(in:self)

        //BackButton Action
        if backButton.contains(location) {
            let newScene = GameScene(fileNamed: "GameScene")
            newScene?.scaleMode = .aspectFill
            let reveal = SKTransition.push(with: SKTransitionDirection.up, duration: 0.7)
            self.view?.presentScene(newScene!, transition: reveal)
        }

    }

}

我该如何解决?

0 个答案:

没有答案