我在加载应用程序时在视图中放置了多个SCNNode。 从touches开始,我将删除点击的所有节点。
到目前为止,所有这些方法都有效,所以我知道我的代码正在工作,但是仅添加SCNParticleSystem会给我带来问题。
我在无效的行旁放了两颗星(**)
// On tap
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
// Register tap
let touch = touches.first!
// Get location
let location = touch.location(in: sceneView)
// Create a hit
let hitList = sceneView.hitTest(location, options: nil)
if let hitObject = hitList.first {
// Get node from hit
let node = hitObject.node
if node.name == target {
score += 3
playAudio(fileName: "two")
**let explosion = SCNParticleSystem(named: "stars.scnp", inDirectory: nil)
**node.addParticleSystem(explosion!)
node.removeFromParentNode()
// Async call
DispatchQueue.main.async {
node.removeFromParentNode()
self.scoreLabel.text = String(self.score)
}
}
}
}
如何将粒子附着到节点上?
答案 0 :(得分:1)
如果要查看爆炸并删除节点,只需设置一个等待计时器,例如:
let explosion = SCNParticleSystem(named: "stars.scnp", inDirectory: nil)
node.addParticleSystem(explosion!)
let waitAction = SCNAction.wait(duration: 3)
node.runAction(waitAction, completionHandler: {
self.node.removeFromParentNode()
self.scoreLabel.text = String(self.score)
})
您可以在任何节点上发布等待操作,因此,如果您在场景中有一个中心节点,它也可以使用