Хорошо, у меня нет большого опыта работы с SKScene, но я бы так и сделал. Вам действительно нужен только один SKView на вашей игровой площадке, который вы можете хранить как static let
внутри файла с переменными игры. Затем вы можете создать разные сцены, например одну для меню, одну для первого уровня, второго уровня и т. Д. c.
Следующий код создает кнопку и дает ей действие. Действие создает константу с именем scene, которая является сценой, к которой вы хотите перейти. Затем вы просто вызываете presentScene()
со сценой и SKTransition, как показано ниже, который представляет собой просто 2,5-секундную скользящую анимацию справа.
Класс ButtonNode, который является просто узлом, который действует как Кнопка, которую вы можете добавить к вашей сцене.
class ButtonNode: SKSpriteNode {
var action: ((ButtonNode) -> Void)?
var isSelected: Bool = false {
didSet {
alpha = isSelected ? 0.8 : 1
}
}
required init(coder: NSCoder) {
fatalError("NSCoding not supported")
}
init(texture: SKTexture, size: CGSize) {
super.init(texture: texture, color: SKColor.white, size: size)
isUserInteractionEnabled = true
}
override func touchesBegan(with event: NSEvent) {
action?(self)
}
override func mouseDown(with event: NSEvent) {
action?(self)
}
}
Создание кнопки и предоставление ей действия для перехода к следующей сцене. Это можно сделать в любом классе SKScene.
startButton = ButtonNode(texture: SKTexture(imageNamed: "start-button"), size: CGSize(width: 184, height: 72))
startButton.position = CGPoint(x: 0.0, y: 0.0)
startButton.action = { (button) in
if let scene = IntroCutScene(fileNamed: "IntroCutScene") {
// Set the scale mode to scale to fit the window
self.scene!.scaleMode = .aspectFill
// Present the scene
GameVariables.sceneView.presentScene(scene, transition: SKTransition.moveIn(with: SKTransitionDirection.right, duration: 2.5))
}
}
self.addChild(startButton)