使用SceneKit时,更新方法:
func renderer(aRenderer: SCNSceneRenderer, updateAtTime time: NSTimeInterval)
不是在主要的thead上调用,而是在其他一些线程上调用。
我应该在主线程上做什么,以及在这个" SceneKit线程"
上需要做些什么?我应该在哪里添加新的节点/几何?
修改这些对象的位置/等在哪里安全?
答案 0 :(得分:8)
问题是关于scenekit。节点/几何体实际上并没有添加到主线程上,即使这样做也是如此。 Scenekit不在主线程上呈现。更改将批处理到呈现线程。如果渲染是UI,则它不在主线程上。实际上,如果你对主线程进行了更改,那么你会感觉不好,因为渲染线程正在尝试渲染被破解的对象。这就是为什么removefromparent在Apples香蕉游戏中的SCNTransaction中。因此删除发生在渲染线程而不是主线程上。添加以相同的方式进行批处理。它实际上没有添加到主线程上。
所以请注意,渲染线程同时进行。如果在主线程上使用scene.rootnode进行枚举,则会从渲染线程中发生崩溃,从而对根节点进行更改。但由于事情发生的速度很快,因此可能非常罕见。一般来看看香蕉游戏,狐狸游戏,看看他们如何使用它。
答案 1 :(得分:-3)
所有UI活动都发生在主线程上。非UI活动应该在另一个线程上发生。一个例子是从互联网上获取图像,但这会阻塞主线程,因为那样什么都行不通。所以,你会在另一个线程上做到这一点。您应该在主线程上添加新节点/几何体,因为它是UI的一部分。你应该在主线程上修改这些对象的位置。