【问题标题】:Issue with CPU and memory being consumed after a segue between ViewControllers在 ViewController 之间进行 segue 后消耗 CPU 和内存的问题
【发布时间】:2015-02-10 10:02:03
【问题描述】:

我在使用我的 segue 在两个不同的场景之间进行碰撞时遇到问题。

我的代码目前将等待精灵的碰撞,然后它会运行:

func gameOver() {
    performSegueWithIdentifier("gameOver", sender: nil)
}

正如你所知道的,它对 gameOver 场景执行 segue(模态),这是一个带有 UIImageView 和“RETRY”按钮的 ViewController,然后使用模态 segue 返回到 GameViewController 并且我的游戏再次运行直到发生碰撞.

问题是每次检测到碰撞并点击“重试”时,我可以看到越来越多的内存和 CPU 在显示器上被用完。在大约 8-10 次重试后,我还看到大约 30FPS 的损失。

我的碰撞函数是:

func collision(Bee:SKSpriteNode, Player:SKSpriteNode) {
    scene?.paused = true
    println("HIT")
    self.viewController.gameOver()
} 

我相信这个问题可能与scene?.paused = true 有关,但我已经尝试了所有方法,只是无法找出正确的方法来在检测到碰撞时关闭场景,并在“重试”时重新启动整个游戏按下。

【问题讨论】:

    标签: ios objective-c swift sprite-kit


    【解决方案1】:

    您说您使用模态转场回到新游戏?我认为问题在于您将创建一个新版本的游戏控制器。因此,为什么你的记忆会上升。每次添加一个新的游戏控制器。

    当重试时,为什么不直接关闭重试控制器,让它显示原始游戏屏幕。

    所以要么关闭 RETRY 控制器,要么使用反向搜索,这是一种向后搜索的机制。

    在 RETRY 按钮的操作中添加:

    [self dismissViewControllerAnimated:YES completion:nil];
    

    【讨论】:

    • 好的,我试试这个!这似乎是在objective-c而不是swift中,对吧?我将如何迅速做到这一点?如果我关闭重试控制器,如何重新启动 gameController 以便游戏真正重新开始?我认为它会关闭我所在的视图并回到游戏的碰撞状态
    • self.dismissViewControllerAnimated(true, completion: nil)
    • 谢谢,在你发帖之前我才知道。正如预期的那样,游戏现在才从碰撞的地方开始。所有物体也都停止了移动。你知道我如何“重启”游戏场景吗?
    • 我会在 viewDidAppear 中添加一些代码。当您的视图控制器作为主视图返回时,这将被调用。在那里重新开始游戏。注意:它也会在你的控制器第一次出现时被调用。作为猜测,请致电:scene?.paused = false。不确定您的代码是如何工作的。
    • 我想我回答了问题 8^)。您现在正在回答新问题。
    【解决方案2】:

    您需要在游戏结束时使计时器无效,这将停止计时器。

    nametimer.invalidate()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-20
      • 2010-11-05
      • 2017-10-01
      • 1970-01-01
      • 2010-09-08
      相关资源
      最近更新 更多