当我从一个节点切换到另一个节点时,是否应该删除所有SKSpriteNodes和标签

时间:2016-10-03 08:05:31

标签: swift sprite-kit

我的iOS游戏有几个场景。我注意到切换场景之间存在一些延迟,我想知道是否可能是因为当我转换到另一个场景时,我没有从父母那里删除所有节点和标签。转换到另一个场景时,从父项中删除所有节点是一种好习惯吗?

另外,我注意到当我删除所有节点时,过渡效果有点破坏,因为在过渡期间屏幕全黑。

是否可以在转换到下一个场景后删除(前一场景的)节点?

1 个答案:

答案 0 :(得分:2)

执行转换时,场景及其节点将从内存中释放,除非您有strong reference cycle。此外,您应该知道SpriteKit有自己的SKTextures缓存系统,因此不会释放所有内存。

滞后可能是由很多事情造成的,有些可能性:

  1. 如果在touchesEnded(或自定义按钮回调闭包)上实例化新场景,可能会导致延迟,因为您在初始化时做了太多工作。这可以通过例如使用在后台运行的闭包预加载场景来解决,当您必须运行转换时,您已经加载了所有内容。一个例子如下: enter image description here

  2. 也许你正在使用太大的资产,因为它们需要更长的时间来加载,你就有了滞后。例如,您可以通过将不需要Alpha通道的图像转换为.jpeg来解决此问题。 另一种解决方案是预加载资产。下面是一个代码示例。 enter image description here