【发布时间】:2023-03-09 14:15:01
【问题描述】:
我正在制作我的 SpriteKit 游戏。当玩家死亡时,我的目标是让游戏过渡到开始屏幕。这是通过下面的代码完成的。但是,我注意到每次新游戏开始时内存都会增加。 Xcode Instruments 没有显示内存泄漏。当内存达到大约 150mb 时,游戏帧率下降,游戏变得无法玩。
在GameScene中我会在玩家死亡时调用这个函数
func gameOver(){
if let block = gameOverBlock {
worldNode.removeAllChildren()
worldNode.removeAllActions()
worldNode.removeFromParent()
self.removeAllChildren()
block()
}
}
在 GameViewController 中调用以下函数
scene!.gameOverBlock = {
[weak self] in
self!.goBack()
}
}
func goBack(){
scene!.removeFromParent()
navigationController!.popToRootViewControllerAnimated(false)
return
}
如果有人对我如何在不发生内存泄漏的情况下实现这一点有任何想法,将不胜感激。
【问题讨论】:
-
什么是
worldNode? SpriteKit 场景? -
worldNode 只是 gameScene 中的一个 SKNode()。它包含所有游戏元素
-
我想知道是否存在某种强引用循环。除了第一个之外的所有视图控制器都被取消初始化,也许另一个对象仍然持有指向它的指针,所以它永远不会离开内存,这可以解释你不断增长的内存。祝你好运,这些问题很糟糕。
标签: ios swift memory-leaks sprite-kit