我已经开始将我的项目作为Spritekit
游戏。
我在故事板中的defaultviewcontroller
顶部放了一个按钮。
我在viewwilllayoutsubviews
中展示了一个场景。
if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
// Configure the view.
let skView = self.view as! SKView
self.skView = skView
skView.showsFPS = true
skView.showsNodeCount = true
/* Sprite Kit applies additional optimizations to improve rendering performance */
skView.ignoresSiblingOrder = true
/* Set the scale mode to scale to fit the window */
scene.scaleMode = SKSceneScaleMode.AspectFill
println("Width: \(scene.frame.width) andHEight: \(scene.frame.height)")
scene.gameSceneDelegate = self
sceneStack.append(scene)
skView.presentScene(scene)
}
过了一段时间后,我通过viewcontroller代码转换到了一个新场景:
skView.presentScene(scene, transition: transition)
现在场景发生了变化,但是我放在视图故事板上的按钮停留在场景之上。
在第二个场景中,我改变了UIButton的图像:
self.lockButton.setImage(UIImage(named: "unlocked-button"), forState: UIControlState.Normal)
现在按下按钮我改变了按钮的图像。这令人惊讶地导致场景改变回到前一场景。 因此,更改按钮的任何属性都会导致我的新场景弹出并恢复到我最初提供的场景。
内容: 简而言之,我想要的是一个单独的UIViewController,它将在我的游戏的每个场景中都有一个普通的HUD。因此,我不断更改UIViewController呈现的场景,保持UIViewController不变。但是当我更改按钮的任何属性,通过故事板设置,在SKScene(图像,backgroundImage,标题等)上显示时,会导致视图恢复到它显示的初始场景。
答案 0 :(得分:0)
如果我理解了这一点,你在Storyboard中设计了游戏GUI菜单,然后你想在按下按钮时调用SpriteKit游戏?
如果是这种情况,则需要添加新的视图控制器(使用segue或只调用presentViewController方法)。在该视图控制器中,您可以在viewDidLoad或viewWillLayoutSubviews方法中设置SpriteKit。
因此,当您触发按钮时,按钮会调用此新视图控制器(通过segue或其他方式),游戏将按预期执行。
然而,棘手的部分是解雇游戏。如果你只是解雇持有游戏的视图控制器,游戏实际上仍会在后台播放一些东西(在我的例子中,音乐和效果!!!)。 因此,为了执行退出游戏,您需要在退出级别\游戏按钮中实现此功能:
[(NewGameScreenViewController *)self.view.window.rootViewController dismissViewControllerAnimated:YES completion:nil];
对不起,只有Objective-C,讨厌swift:)
希望这有帮助。