SKTransition Проблемы и загрузка сцены

Поэтому я сейчас создаю игру. У меня есть несколько сцен: меню, настройки, gameScene и GameOverScene.

Переход между ВСЕХ ВСЕХ сцен происходит без проблем, код, который я использую для перехода: (например, для меню в GameScene)

let secondScene = GameScene(size: self.size)
let transition = SKTransition.pushWithDirection(.Up, duration: 0.7)
secondScene.scaleMode = SKSceneScaleMode.AspectFill
self.scene!.view?.presentScene(secondScene, transition: transition)

Тем не менее, моя GameScene для GameOverScene очень глючная. Там обычно длинная пауза.

Все содержимое GameOverScene:

import Foundation
import SpriteKit

class GameOverScene: SKScene {


    override func didMoveToView(view: SKView) {
        let myLabel = SKLabelNode(fontNamed:"American Typrewriter")
        myLabel.text = "Game Over!";
        myLabel.fontSize = 45;
        myLabel.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame));

        self.addChild(myLabel)
   }
}

Поэтому я считаю маловероятным, что это является причиной задержки перехода.

Код, который я использую для вызова игры "закончен":

override func update(currentTime: CFTimeInterval) {

if sprite.position.y < 100 {gameOver()}
}

func gameOver() {

    // Loads GameOver Scene //
    let secondScene = GameOverScene(size: self.size)


    // Creates vibration //
    AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))


        func boatSink() {
        sprite.physicsBody = nil
        sprite.physicsBody?.affectedByGravity = false
        sprite.physicsBody?.dynamic = false

        let spritefly = SKAction.moveTo(CGPointMake(400,20), duration:2.0)
        car.runAction(spritefly) }



    let transition = SKTransition.pushWithDirection(.Up, duration: 3.0) 
    let nextScene = GameOverScene(size: scene!.size)
    nextScene.scaleMode = .AspectFill

    scene?.view?.presentScene(nextScene, transition: transition)        
}

Я экспериментировал с использованием задержек, таких как:

let skView = self.view! as SKView
            let scene = GameOverScene(size: self.scene!.size)
            scene.size = skView.bounds.size
            scene.scaleMode = .AspectFill

  let time = dispatch_time(dispatch_time_t(DISPATCH_TIME_NOW), 1 * Int64(NSEC_PER_SEC))
        dispatch_after(time, dispatch_get_main_queue()) {



            let sceneTransition = SKTransition.doorsCloseHorizontalWithDuration(2.0)
            sceneTransition.pausesOutgoingScene = true;
            skView.presentScene(scene, transition: sceneTransition)}

Чтобы дать время для загрузки, но это не работает.

Я также пытался использовать 'pausesOutgoingScene' и pausesIncomingScene 'безрезультатно.

Я наконец попытался замедлить текущую сцену до 0.0, используя:

func pauseGameScene() {
        self.physicsWorld.speed = 0.0
        self.speed = 0.0
    }

хотя это только остановило прогресс кода дальше.

Мои вопросы: 1. Есть ли что-то действительно очевидное, о чем я не думаю о своих переходах? 2. Есть ли способ загрузить все сцены заранее, я уверен, что это, вероятно, даст лишь незначительное улучшение, но это определенно та область, на которую я еще не смотрел.

0 ответов

Другие вопросы по тегам