Ios 在Swift中连续渲染SceneKit场景中的新子节点对象

Ios 在Swift中连续渲染SceneKit场景中的新子节点对象,ios,swift,xcode,scenekit,scene,Ios,Swift,Xcode,Scenekit,Scene,已解决: 替换以下代码: DispatchQueue.global(qos:.userInitiated).async{ 虽然是真的{ self.spawnShape() 睡眠(1) } } 借 Timer.scheduledTimer(withTimeInterval:1,repeats:true){Timer in self.spawnShape() } 解决了我的问题 问题: 我有一个关于我正在做的场景工具包项目的问题。因此,我在这个场景中随机生成立方体并将它们添加到场景根节点,问题是

已解决:

替换以下代码:

DispatchQueue.global(qos:.userInitiated).async{
虽然是真的{
self.spawnShape()
睡眠(1)
}
}

Timer.scheduledTimer(withTimeInterval:1,repeats:true){Timer in
self.spawnShape()
}
解决了我的问题

问题:

我有一个关于我正在做的场景工具包项目的问题。因此,我在这个场景中随机生成立方体并将它们添加到场景根节点,问题是它们在开始时被渲染,但很快就会停止渲染,所以我看不到这些新对象正在生成,我在屏幕上点击时会再次看到它们(因此,当我在场景上执行操作或其他操作时)或者有时其中一些是随机渲染的,我不知道为什么

我已经尝试将rendersContinuously设置为true,但这并没有改变任何事情

以下是多维数据集生成线程:

DispatchQueue.global(qos:.userInitiated).async{
虽然是真的{
self.spawnShape()
睡眠(1)
}
}
以下是如何将它们添加到子节点:

让geometryNode=SCNNode(几何体:几何体)
geometryNode.simdWorldPosition=simd_float3(Float.random(in:-10..=self.screenSize.width/2{
self.delta=0.5
}
否则{
self.delta=-0.5
}
self.ship.runAction(SCNAction.rotateBy(x:0,y:0,z:self.delta,duration:turneduration))
返回
}
如果手势.state==.changed{
返回
}
自投运行(旋转(x:0,y:0,z:-self.delta,持续时间:turnDuration))
}
基本上,它会根据我点击屏幕的哪一侧左右旋转我的飞船,并显示我在控制台中点击的坐标。当我松开时,飞船会回到初始位置/旋转

DispatchQueue.global(qos: .userInitiated).async {
        while true {
            self.spawnShape()
            sleep(1)
        }
}
你这样做不是阻塞了共享队列吗?如果你想周期性地运行一些东西,请使用计时器


你这样做不是阻止了共享队列吗?如果你想定期运行某些东西,请使用计时器。

请提供更详细的代码。例如,你如何启动主要功能等。当你点击屏幕时,你的代码会做什么等等。谢谢。我添加了一些信息。如果需要,我还可以上传屏幕截图。请提供更详细的代码。比如你如何启动你的主要功能等。当你点击屏幕时,你的代码会做什么等等。谢谢。我已经添加了一些信息。如果需要,我也可以上传屏幕截图。谢谢。我不知道为什么,但是用定时器代替这个队列+while true+sleep解决了我的问题。谢谢。我不知道w为什么,但是使用计时器而不是这个队列+而true+sleep解决了我的问题。