首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从场景加载节点后应用程序冻结

从场景加载节点后应用程序冻结
EN

Stack Overflow用户
提问于 2019-02-18 17:56:25
回答 2查看 540关注 0票数 2

我正在用ARKit创建一个应用程序,它工作得很好。我遇到的唯一问题是,如果我想显示某个Node,应用程序会冻结大约一秒钟。我想不出解决这个问题的办法。用相同的对象尝试相同的代码,只是纹理较少,它不会冻结。

场景是4.2mb的,但有很多纹理。已在iOS 12.1.0 iPhone Xs上测试。

代码语言:javascript
复制
   guard let scene = SCNScene(named: "myScene.scn") else { return }

    if let nodeToDisplay = scene.rootNode.childNode(withName: "nameOfNode", recursively: true) {

            self.sceneView.scene.rootNode.addChildNode(nodeToDisplay)
    }
EN

回答 2

Stack Overflow用户

发布于 2019-02-18 18:24:06

尝试使用prepare(_:completionHandler:)添加节点。

默认情况下,SceneKit会懒惰地将资源加载到

上进行渲染。这种方法可以有效地使用内存和GPU带宽,但在向动画场景中添加大量新内容时,可能会导致帧速率平滑时出现卡顿。若要避免此类问题,请在将内容添加到场景之前,使用此方法准备要绘制的内容。SceneKit使用辅助线程异步准备内容。

所以你的代码应该是这样的:

代码语言:javascript
复制
self.sceneView.prepare(nodeToDisplay) { (success) in
    self.sceneView.scene.rootNode.addChildNode(nodeToDisplay)
}
票数 2
EN

Stack Overflow用户

发布于 2019-02-18 17:58:23

您可以尝试来实现这一点。

只需简单地使用这个

代码语言:javascript
复制
DispatchQueue.main.async {
self.sceneView.scene.rootNode.addChildNode(nodeToDisplay)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54744540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档