【发布时间】:2016-11-30 13:30:35
【问题描述】:
在一个场景中有几个子节点,然后快速过渡到一个新场景。
在新场景中,didMove(to view: ….) 用于将前一个场景的孩子添加到下一个场景中。
快速执行此操作时,SceneKit 崩溃,似乎是因为旧场景的子级尚未释放。
如果我在将孩子添加到第二个场景之前添加一点延迟,那很好……看起来 SpriteKit 释放孩子的速度不够快,无法进行场景转换。
以上是关于这个问题的目的最重要的理解。我(错误地)假设 SpriteKit 会确保在尝试将它们添加到后续场景之前释放附加到场景的所有节点。它不这样做。但它确实释放了它们,只是需要一点时间。这是一帧吗?一秒?不知道...
我的场景过渡时间是 0.25 秒
还尝试在原始场景中使用willMove(to view: ….) 手动移除孩子。这也不起作用,看似相同的行为:不够快。
还尝试假设孩子仍然与其父母有关系,因此尝试移动到其新父母,新场景,move(toParent:…) 这也会崩溃。所以也许孩子们已经被标记为即将被释放,我想。
是否知道,如果知道,如何处理?
【问题讨论】:
-
您不能在 移动到场景之前将孩子添加到场景中吗?我认为这会产生最快的结果。
-
所以从一个中删除,然后添加,然后切换场景?
-
啊,这是一个有趣的方法。我刚刚弄清楚
moveTo(的实际工作原理......对于这种情况来说,它不够理想和纯粹。但可以在其他情况下使用。 -
您总是希望尽可能多地预加载以减少加载时间(例如 didMoveToView)。我无法具体说明为什么您在没有项目文件的情况下会崩溃。您能否在新项目中始终如一地重现这种情况(例如出现错误)?
-
我正在一个框架项目中创建菜单,所以是的......它是完全可重现的,问题中的步骤显示了我在隔离和确定问题方面的尝试。
标签: ios swift sprite-kit skscene