要呈现3个场景,您的方法似乎非常复杂。它不是您应该为SpriteKit游戏做的,实际上只需要1个视图控制器(GameViewController)。
从GameViewController(例如HomeScene)加载您的第一个场景,仅此而已。直接在HomeScene中创建playButton和其他UI。将SpriteKit
API用于您的UI(SKLabelNodes,SKNodes,SKSpriteNodes等)。
您绝对不应在SpriteKit中真正使用UIKit(UIButtons,UILabels)。对此有一些例外,例如可能将UICollectionViews用于大量级别的选择菜单,但基本的UI应该使用SpriteKit
API完成。
Google上有很多教程,介绍如何创建Sprite
Kit按钮,如何使用SKLabelNodes等。Xpre具有SpriteKit级别编辑器,因此您可以在视觉上完成类似于故事板的所有操作。
从HomeScene过渡到LevelSelect场景,再到GameScene,反之亦然。它超级容易做到。
/// Home Sceneclass HomeScene: SKScene { ... func loadLevelSelectScene() { // Way 1 // pre only, no XCode/SpriteKit visual level editor used let scene = LevelSelectScene(size: self.size) // same size as current scene // Way 2 // with xCode/SpriteKit visual level editor // fileNamed is the LevelSelectScene.sks you need to create that goes with your LevelSelectScene class. guard let scene = LevelSelectScene(fileNamed: "LevelSelectScene") else { return } let transition = SKTransition.SomeTransitionYouLike view?.presentScene(scene, withTransition: transition) } }/// Level Select Sceneclass LevelSelectScene: SKScene { .... func loadGameScene() { // Way 1 // pre only, no XCode/SpriteKit visual level editor used let scene = GameScene(size: self.size) // same size as current scene // Way 2 // with xCode/SpriteKit visual level editor // fileNamed is the GameScene.sks you need to create that goes with your GameScene class. guard let scene = GameScene(fileNamed: "GameScene") else { return } let transition = SKTransition.SomeTransitionYouLike view?.presentScene(scene, withTransition: transition) } }/// Game Sceneclass GameScene: SKScene { ....}我强烈建议您使用情节提要和ViewController方法,并仅使用不同的SKScenes和1个GameViewController。
希望这可以帮助



