particleLifetime确定粒子的平均寿命,以秒为单位。这不会影响从父级删除 SKEmitterNode。
numOfParticlesToEmit指的是粒子编辑器的粒子区域中的最大字段,它决定了发射器在停止之前应该发射的粒子数。这也不影响从父级删除 SKEmitterNode 。另请注意,您已在此字段中设置 0,这将启用无限发射。
因此,如果您想在发射器完成发射后从父节点中移除节点,您可以设置要发射的粒子数(编辑器内粒子区域中称为最大值的字段)并运行一个 SKAction 序列,该序列将:
- 启动发射器
- 等待一段时间
- 并从父级移除发射器(此时发射器应该完成发射)
这是一个简单的示例,向您展示如何使用 SKAction 序列执行此操作:
class GameScene: SKScene {
let emitter : SKEmitterNode = NSKeyedUnarchiver.unarchiveObjectWithFile(NSBundle.mainBundle().pathForResource("MyParticle", ofType: "sks")!) as SKEmitterNode
override func didMoveToView(view: SKView) {
self.backgroundColor = SKColor.blackColor()
}
func addEmitter(position:CGPoint){
var emitterToAdd = emitter.copy() as SKEmitterNode
emitterToAdd.position = position
let addEmitterAction = SKAction.runBlock({self.addChild(emitterToAdd)})
var emitterDuration = CGFloat(emitter.numParticlesToEmit) * emitter.particleLifetime
let wait = SKAction.waitForDuration(NSTimeInterval(emitterDuration))
let remove = SKAction.runBlock({emitterToAdd.removeFromParent(); println("Emitter removed")})
let sequence = SKAction.sequence([addEmitterAction, wait, remove])
self.runAction(sequence)
}
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
let touch: AnyObject? = touches.anyObject()
let location = touch?.locationInNode(self)
self.addEmitter(location!)
}
}
这是结果(注意在发射完成后节点的计数是如何变化的):
希望这可以帮助
编辑:
对于那些对如何制作与上面视频类似的效果感兴趣的人,请尝试以下操作:
关键是使用颜色渐变,并为混合模式选择添加。
这是 .sks 文件的 Dropbox 链接:Effect.sks