SCNParticleSystem 未在 touchesbegan 上添加到 SCNNode
SCNParticleSystem not adding to SCNNode on touchesbegan
我在加载我的应用程序时在我的视图中放置了多个 SCNNode。
在 touchesbegan 上,我将删除任何被点击的节点。
到目前为止所有这些都有效,所以我知道我的代码可以正常工作,但是仅仅添加一个 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)
}
}
}
}
如何将粒子附加到节点?
如果你想看到爆炸并删除节点,只需设置一个等待计时器,例如:
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)
})
您可以post在任何节点上执行等待操作,因此如果您在场景中有一个中心节点,它也可以使用它
我在加载我的应用程序时在我的视图中放置了多个 SCNNode。 在 touchesbegan 上,我将删除任何被点击的节点。
到目前为止所有这些都有效,所以我知道我的代码可以正常工作,但是仅仅添加一个 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)
}
}
}
}
如何将粒子附加到节点?
如果你想看到爆炸并删除节点,只需设置一个等待计时器,例如:
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)
})
您可以post在任何节点上执行等待操作,因此如果您在场景中有一个中心节点,它也可以使用它