【发布时间】:2015-05-24 11:43:24
【问题描述】:
我的游戏中有一个“生命计数器”,当它达到 0 = 死亡时 - 我想从场景移到另一个 UIView - 这是游戏概览 - 带有统计信息和返回主页的按钮屏幕(第一个带有按钮的 UIViewController 开始游戏等等。
这是我如何移动到游戏概览视图的代码
class GameScene: SKScene,SKPhysicsContactDelegate {
var viewController: UIViewController?
// more code and functions
// ......
func trackLife (lifeCHange: Int){
life = life + lifeCHange
lifeLabel.text = String(life)
if life < 1 {
// Go to Game Over VC
self.removeAllChildren()
self.removeAllActions()
self.scene?.removeFromParent()
self.viewController!.performSegueWithIdentifier("gameOverSegue", sender: viewController)
}
}
}
这适用于呈现游戏视图,但我认为我不是“处置”或重置场景。因为如果我在循环中这样做:
开始游戏 --> 游戏结束 --> 返回主屏幕 --> 开始游戏 --> 游戏结束......
我看到每个周期的内存使用量都会增加:) 我想我只是添加场景而不是删除它们?
对不起 - 我对此很陌生。将非常感谢您的经验!:)
【问题讨论】:
-
你只使用segue的perform,旧的viewController不会被释放。您需要弹回或重置 window.rootViewController 以打破保留周期。
-
@SolaWing pop back - 你的意思是回到哪里?到加载场景的视图控制器?如果我想重置 - 如何正确执行此操作?
-
是的。您可以通过
dismissViewControllerAnimated或popViewControllerAnimated返回,取决于您是否使用 NavigationController。如果你想重置,取决于哪个属性持有原始主 ViewController(window.rootViewController,如果它是你的初始 viewController,或者 NavigationController 的 viewControllers 属性),你可以用新的主 ViewController 覆盖它。 -
@SolaWing 我想我做错了什么。所以我更喜欢重置整个事情。按照上面的代码 - 我执行 segue - 所以 Game Over VC 会弹出。在那一刻,我怎样才能“放下”带有场景的游戏视图控制器,以便在我移至主屏幕并再次开始游戏时再次重新创建?我有点迷失在哪里以及如何覆盖rootvc......对不起:(
-
你为什么选择新的视图控制器?为什么不直接在
SKView上使用presentScene方法呈现一个新的scene。看看this
标签: ios swift sprite-kit scene