无法在ARKit中正确移动SCNNodes

时间:2018-07-16 10:46:44

标签: ios swift grand-central-dispatch arkit scnnode

您好,谢谢您阅读本文档! 我实际上是在尝试为大理石纸牌提供解决方案,但是我无法设法使节点正确移动甚至出现。为了使这个简短易于了解并且对每个人有用,我将主要集中在节点的外观上。 我基本上希望它们每个都比网格高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 使它们向前移动一个,但是仍然,正如您可能已经猜到的那样,它没有用。


如果任何人都知道如何进行或知道如何解决该问题,将不胜感激!感谢您的阅读。

0 个答案:

没有答案