出现新场景后,SKScene 在背景中挥之不去

Posted

技术标签:

【中文标题】出现新场景后,SKScene 在背景中挥之不去【英文标题】:SKScene lingering in background after present new scene 【发布时间】:2015-03-18 00:48:36 【问题描述】:

在我的应用程序中,我有 3 个不同的 SKScene 子类用于我的菜单、游戏和游戏画面。当玩家在游戏中遇到障碍物时,我会使用以下方式呈现一个新的游戏结束场景:

EndGame *endGame = [[EndGame alloc] initWithSize:[UIScreen mainScreen].bounds.size];
SKView *spriteView = (SKView *)self.view;
[spriteView presentScene:endGame];

但是,我的 gameScene 仍在后台运行(我可以通过在 update 方法中打印一条消息来判断)。当我呈现游戏结束场景时,如何确保释放 gameScene 的实例?

目前,当我在场景之间移动时,我的内存使用量会缓慢增加。

【问题讨论】:

您是否将场景保留在某处作为强大的属性? 我不知道那是什么意思,所以可能不是。 哦,不,我从来没有这样做过。 根据您发布的内容,它应该可以工作..您可能正在做其他事情。为什么不在一个精简的项目上尝试一下,看看是否得到相同的结果? 在尝试了一个精简的项目后,我发现了问题。当我从视图中移动时,更新方法确实停止了。当我之前说我使用的是更新方法时,实际上是在使用自定义计时器来运行我的物理。我假设当我从视图中移动时,这个计时器会自动失效,但由于某种原因,它一直在后台运行。我所要做的就是在从视图中移动之前使计时器无效。谢谢! 【参考方案1】:

虽然您找到了答案的解决方案,但我也有类似的情况。

我有一个navigationController,它显示了一个MainViewController,您可以从中转到GameViewController(使用SKScene)。在“游戏结束”之后,我会弹回 MainViewController,但是,我的场景(在 GameViewController 中)仍在后台运行。我通过在 update() 函数中打印 TimeInterval 来检查。

我最终做的是,在我看来DidDisappear,我做了一个

skView.presentScene(nil)

这在我的案例中删除了场景并释放了它正在使用的所有内存。

【讨论】:

以上是关于出现新场景后,SKScene 在背景中挥之不去的主要内容,如果未能解决你的问题,请参考以下文章

使 SKScene 的背景透明不起作用......这是一个错误吗?

SpriteKit:检测当新场景显示以后

在 SKScene 中隐藏和取消隐藏按钮

SKScene touchesEnded 第二次呈现场景时未调用

SpriteKit - SKScene 边界不等于 SKView 边界

在 Sprite Kit 中组合多个 SKScene