Переключение сцен в SpriteKit Swift 2

Я пытался сделать игру в наборе спрайтов, и я хочу реализовать начальный экран с кнопкой воспроизведения, которая перенесет вас в настоящую игру. Я видел много способов сделать это, но большинство из них используют swift 1 и не обновлены. Вот код моей функции.

func switchScene()
{
    let scene = GameScene(fileNamed: "PlayScene")
    let transition = SKTranstion.crossFadeWithDuration(1)
    self?.view.presentScene(scene, transition)
}

где PlayScene — это быстрый класс, расширяющий SKScene.


person Aidan Sawyer    schedule 18.02.2016    source источник
comment
Так в чем собственно проблема? ;) Есть ли ошибки? Вы создали и StartScene.sks, и PlayScene.sks? А у вас опечатка, это SKTransition, а не SKTranstion   -  person Whirlwind    schedule 18.02.2016


Ответы (2)


В своих играх я использую это:

// Setting a size (or else it may look like its zoomed in)
var selectView = BallSelect(size: view!.bounds.size) 
// Setting a file for that scene
selectView = BallSelect(fileNamed: "BallSelect")! 
// Setting the scale
selectView.scaleMode = SKSceneScaleMode.AspectFill 
// Transitioning scenes wit a specific transition
self.scene?.view?.presentScene(selectView, transition: SKTransition.fadeWithColor(color, duration: 1)) 

Скажи мне, если это работает :)

person Anton O.    schedule 19.02.2016
comment
Мне пришлось немного повозиться с распаковкой, но (if let оператор с selectView = PlayScene(fileNamed:)) но кроме того, это работало очень хорошо - person Aidan Sawyer; 28.02.2016

Здесь важно иметь два файла .sks, потому что вы используете удобный инициализатор SKNode fileNamed:. Итак, если вы еще этого не сделали, перейдите к

Файл -> Создать -> Файл...-> Ресурс-> Игровая сцена SpriteKit

и добавьте новый файл .sks. Теперь, поскольку fileNamed: объявлен неудачным инициализатором, он может вернуть nil:

public convenience init?(fileNamed filename: String) 

Вы должны использовать необязательную привязку для безопасного доступа к вашей новой сцене:

StartScene.swift

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

        if let scene = PlayScene(fileNamed: "PlayScene"){
            let transition = SKTransition.crossFadeWithDuration(1)
            view?.presentScene(scene, transition: transition)
        }     
}
person Whirlwind    schedule 18.02.2016
comment
Я провел некоторое тестирование с этим, и механизм кнопок, который я реализовал, работал, но программа не пройдет мимо инструкции if let scene = PlayScene. P.S. спасибо за помощь - person Aidan Sawyer; 27.02.2016