【发布时间】:2015-05-08 10:50:23
【问题描述】:
我正在根据下面描述的导航逻辑使用 SpriteKit 和 Swift 构建游戏。
(来源:noelshack.com)
下面的代码说明了从一个屏幕转到另一个屏幕的逻辑(这里是从启动屏幕转到首选项设置屏幕或关卡选择屏幕)
class StartupScreen: UIViewController
{
override func viewDidLoad()
{
super.viewDidLoad()
let StartView = self.view as SKView
let StartScene = StartSceneClass(size: self.view.bounds.size)
StartView.ignoresSiblingOrder = true
StartScene.scaleMode = .AspectFill
StartView.presentScene(StartScene)
}
+ some other code
}
class StartSceneClass: SKScene
{
+ some init and game logic code…
override func touchesBegan(touches: NSSet, withEvent event: UIEvent)
{
for touch: AnyObject in touches
{
let location = touch.locationInNode(self)
switch self.nodeAtPoint(location)
{
case self.playButton:
let vc = self.view?.window?.rootViewController?.storyboard!.instantiateViewControllerWithIdentifier("ChoixLevelVC") as ChoixLevelVC
self.view?.window?.rootViewController?.presentViewController(vc, animated: true, completion: nil)
case self.BoutonPrefs:
let vc = self.view?.window?.rootViewController?.storyboard!.instantiateViewControllerWithIdentifier("PlayLevelVC") as PlayLevelVC
self.view?.window?.rootViewController?.presentViewController(vc, animated: true, completion: nil)
default:
break
}
}
}
}
我使用与上述相同的逻辑从关卡选择屏幕转到播放关卡屏幕。
我遇到的问题是:
- 当我从关卡选择屏幕转到播放关卡屏幕时,我 在过渡期间查看下面的启动屏幕
- 当我退出 Play Level 屏幕时,我直接回到 Startup 屏幕而不是我来自的关卡选择屏幕
- 我第二次从关卡选择屏幕进入游戏关卡 屏幕,我找回了上次的所有精灵。 SK场景 当我关闭播放级别屏幕时,不会删除 UIViewController。
关于最后一个问题,我想要的是每次退出时完全杀死/擦除播放关卡屏幕。
到目前为止,我已经在被调用的 UIViewController 的 SKScene 或 UIViewController 中实现了self.view?.window?.rootViewController?.dismissViewControllerAnimated(false, completion: nil) 以关闭视图控制器。
我已经阅读了很多关于解除 UIViewController 的方法的资料,并且我明白推荐的方法是从调用 ViewController 中执行此操作(在我的情况下,这意味着我应该从关卡中解除播放关卡屏幕选择屏幕)。但是,我找不到这种方式的 Swift 示例(很多我无法理解的 Obj-C 示例)。
我想尽可能少地使用故事板并以编程方式完成大部分任务。今天我只是使用情节提要来创建每个 ViewController 并加载它,因为我还没有找到一种方法来编写所有代码。
感谢您提供有关正确实施此类导航逻辑的最佳方式的任何链接或建议。
【问题讨论】:
标签: ios swift uiviewcontroller sprite-kit