微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SCNAction 导致场景套件渲染器崩溃

如何解决SCNAction 导致场景套件渲染器崩溃

我有一个由在 AR 环境中设置的几个棋盘组成的游戏。

我需要在某个时候让一些棋盘闪烁。

我正在使用在场景的渲染器循环中执行的 SCNAction 来执行此操作,如下所述。

func renderer(_ renderer: SCNSceneRenderer,updateAtTime time: TimeInterval)
{
    if Blink { TargetNode.runAction(SCNAction.repeat(SCNAction.sequence([SCNAction.hide(),SCNAction.wait(duration: 1),SCNAction.unhide(),SCNAction.wait(duration: 1)]),count: 10)) }
}

TargetNode 是一个由数百个子节点组成的节点(棋盘之一,所有单元格作为单个节点,棋子也作为单个节点,TargetNode 的所有子节点)。闪烁是在别处定义的标志。

几秒钟或几分钟后,我最终出现错误

com.apple.scenekit.scnview-renderer (16): EXC_BAD_ACCESS (code=1,address=0x68)

在阅读了一些关于这个问题的文献后,我开始明白必须在渲染器线程中进行节点修改,这里就是这种情况。至少它是从渲染器线程调用的。

我猜 SCNAction 的构建方式并不能真正确保它按预期执行。

有没有办法以不同的方式执行此操作或确保此 SCNAction 的执行(最好)?

谢谢

解决方法

抱歉,我做 Scenekit 已经有一段时间了......但我想发生了什么......

每次您通过渲染器时都会闪烁,因此它正在重新排队或只是排队操作,这可能是它绑定的原因。由于您要重复 10 次,因此您只想启动一次。 If (Blink) { 加载您的操作一次并关闭 Blink。}

一个想法

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。