【问题标题】:In Swift on "game over" move from scene to another UIView and dispose the scene?在“游戏结束”的 Swift 中,从场景移动到另一个 UIView 并处理场景?
【发布时间】: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 - 你的意思是回到哪里?到加载场景的视图控制器?如果我想重置 - 如何正确执行此操作?
  • 是的。您可以通过dismissViewControllerAnimatedpopViewControllerAnimated 返回,取决于您是否使用 NavigationController。如果你想重置,取决于哪个属性持有原始主 ViewController(window.rootViewController,如果它是你的初始 viewController,或者 NavigationController 的 viewControllers 属性),你可以用新的主 ViewController 覆盖它。
  • @SolaWing 我想我做错了什么。所以我更喜欢重置整个事情。按照上面的代码 - 我执行 segue - 所以 Game Over VC 会弹出。在那一刻,我怎样才能“放下”带有场景的游戏视图控制器,以便在我移至主屏幕并再次开始游戏时再次重新创建?我有点迷失在哪里以及如何覆盖rootvc......对不起:(
  • 你为什么选择新的视图控制器?为什么不直接在SKView 上使用presentScene 方法呈现一个新的scene。看看this

标签: ios swift sprite-kit scene


【解决方案1】:

要在Sprite-Kit 中有效地管理您的记忆,您应该创建另一个SKScene,以便从主屏幕显示您的 GameOver 屏幕。这样,旧的 SKScene 就会被释放。

【讨论】:

  • 是的...我想我会这样做,但是如何回到主屏幕 vc 从哪个游戏场景可以重新开始并且可以释放游戏 overv 场景?
  • 要返回主屏幕,您只需再次呈现 SKScene 主屏幕类。旧游戏结束场景将被释放
  • 好的,知道了。我将更改我的代码以使用游戏结束 SKScene,它显示所有游戏结束信息,然后切换到主屏幕,然后如果游戏开始,则显示游戏 SKScene 而不是游戏结束。谢谢!会试试的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-18
  • 2015-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多