【问题标题】:How to properly handle switching view controllers/scenes?如何正确处理切换视图控制器/场景?
【发布时间】:2016-11-16 06:02:02
【问题描述】:

我的 Swift 2 应用程序中的场景/视图控制器管理存在问题。在我的主菜单中,用户可以点击开始玩游戏,效果很好。在玩游戏时,用户可以选择通过 UIButton 提前离开,或者当他们输掉时,应用程序会自动将他们移回主菜单。

在播放、重定向到主菜单等几个循环后出现问题。玩游戏时 FPS 显着下降,这表明我忽略了某种场景管理效率低下。

主菜单是一个故事板,与播放状态有一个segue,由2部分组成。包含基本 UI 元素的情节提要,以及在情节提要顶部呈现 SpriteKit 元素的 SKScene。要返回,每当用户触摸返回到主菜单按钮时,我都有一个倒带转场,以及一些用于自动将它们移回的不同代码,因此(包含在 SKScene 中):

func goHome()
{            
    self.viewController?.dismissViewControllerAnimated(true, completion: nil)

    self.removeAllChildren()
    self.removeFromParent()
}

当点击主菜单中的播放按钮时,我有一个通向 PlayViewController 的 segue,我在 PlayViewController 的 viewDidLoad() 中有以下内容:

override func viewDidLoad()
{
    super.viewDidLoad()

    scene = GameScene(size: view.bounds.size, controller: self)
    skView = view as! SKView
    skView.ignoresSiblingOrder = true

    scene.scaleMode = .AspectFill

    skView.showsFPS = true
    skView.showsNodeCount = true

    skView.presentScene(scene)
}

这是一个有点复杂的问题,所以如果我的解释有点混乱,我提前道歉。但是,如果有人能阐明导致性能问题的原因,那就太棒了。

谢谢!

【问题讨论】:

  • “这个问题是在播放、重定向到主菜单等几个循环后出现的”——对我来说听起来更像是内存泄漏。 Swift 会自动执行很多操作,但您的绘图代码中可能有一些东西?

标签: ios iphone swift storyboard


【解决方案1】:

问题可能不在于您的场景管理,而在于精灵或场景未正确释放。不过,您的任何代码都没有给我足够的信息来告诉您究竟是什么导致了问题。

【讨论】:

  • 你是对的,我在看完全错误的东西。事实证明,我为一些 SKSprites 制作的包装器导致了性能问题,所以现在我知道我需要修复什么了。谢谢你让我大开眼界!
猜你喜欢
  • 2019-10-06
  • 1970-01-01
  • 1970-01-01
  • 2014-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-26
相关资源
最近更新 更多