我有一个在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.sceneekit.scnview-renderer(16(:EXC_BAD_ACCESS(代码=1,地址=0x68(
在阅读了一些关于这个问题的文献后,我明白了在渲染器线程中进行节点修改是强制性的,这里就是这样。至少它是从渲染器线程调用的。
我猜SCNAction的构建方式并不能真正确保它按预期执行。
有没有办法以不同的方式做到这一点,或者(最好(确保SCNAction的执行?
Thx
对不起,我做Scenekit已经有一段时间了。。。但我认为正在发生的事情。。。
每次浏览渲染器时,闪烁都会打开,所以它正在重新排队或只是排队操作,这可能就是它绑定的原因。由于你重复了10次,所以你只想启动一次。如果(闪烁({加载一次操作并关闭闪烁。}
只是一个想法