从RunAction的完成处理程序调用SCNAction似乎会挂起SceneKit。
触摸事件或旋转设备似乎可以解除挂起。
复制:
1)使用旋转太空船启动时获得的默认SceneKit项目。
2)替换动画代码:
ship.RunAction(SCNAction.RepeatActionForever(SCNAction.RotateBy(0, 2, 0, 1)));
与:
ship.RunAction(SCNAction.RotateBy(0, 2, 0, durationInSeconds: 3.0f), delegate
{
Console.WriteLine("DONE ROTATE");
ship.RunAction(SCNAction.MoveBy(1, 0, 0, durationInSeconds: 3.0f), delegate
{
Console.WriteLine("DONE MOVEBY");
});
});
3)在模拟器或真实设备上运行(问题均相同)
4)结果是:
我使用的是C#和Mac的Visual Studio,但我怀疑使用Xcode也会发生这种情况。
这是SceneKit中的错误吗?如何解决?
也许这是此处描述的相同问题:
SCNAction completion handler awaits gesture to execute
最佳答案
发生这种情况是因为默认情况下,SceneKit不会连续渲染。当点击屏幕时,场景将改变,并且将渲染新的帧。这就是在moveBy
操作之后没有立即触发rotateBy
操作的原因。
尝试将SCNView
的renderContinuously
属性设置为true,如下所示:
scnView.rendersContinuously = true
ship.runAction(SCNAction.rotateBy(x: 0, y: 2, z: 0, duration: 3.0)) {
print("DONE ROTATE")
ship.runAction(SCNAction.moveBy(x: 1, y: 0, z: 0, duration: 3.0), completionHandler: {
print("DONE MOVEBY")
scnView.rendersContinuously = false
})
}
关于ios - 在SceneKit中,从RunAction的完成处理程序调用时,SCNAction挂起,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56189836/