您好,谢谢您阅读本文档! 我实际上是在尝试为大理石纸牌提供解决方案,但是我无法设法使节点正确移动甚至出现。为了使这个简短,易于了解并且对每个人有用,我将主要集中在节点的外观上。 我基本上希望它们每个都比网格高10厘米左右,然后一一降低。网格只是显示在ARReferenceImage上的planeNode。
这是我的 initial 代码(请注意,我使用的类 Player 具有一个SCNNode和一个现成的方法present(),而我的 mainNode (网格),是在 VC 的 renderer (nodeFor锚:)方法中创建的:
for player in playersArray {
mainNode.addChildNode(player.playerNode)
player.appears()
}
这是方法appear():
func appears() {
if self.playerNode.position.z == self.size/56 {
self.playerNode.position.z = self.size/2.8
}
if self.playerNode.position.z >= self.size/28 {
self.playerNode.position.z -= self.size/112
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + milliseconds(40)){self.appears()}
}
}
(首先尝试)在那一点上,我正等着看我的球员出现并逐一下移,但是我正在异步运行他们< / strong> ...
(第二次尝试)因此,我然后尝试使用Timer.scheduledTimer,但它们做了完全相同的事情(因为它们需要在 main上运行,同步调用它们会导致场景冻结)。
(第三次尝试)经过几天的研究和测试,我最终决定将调度级别更改为后台威胁 d,并使用 DispatchGroup < / strong> 等待之前,请每个玩家完成循环,然后要求下一个玩家出现。这导致玩家立即被放置在网格上,就像“动画”不存在一样。
(第四次尝试)然后,我想使用 DispatchSemaphore ,并在动画结束时向我发出信号量,但是视图在以下情况时冻结了我正在等待信号。
(第五次尝试)最后,我想尝试摆脱所有这些方法,并尝试使用带有时间间隔的 SCNAction 使它们向前移动一个,但是仍然,正如您可能已经猜到的那样,它没有用。
如果任何人都知道如何进行或知道如何解决该问题,将不胜感激!感谢您的阅读。