パーティクルのライフタイムは、パーティクルの平均寿命を秒単位で決定します。親からの SKEmitterNode の削除には影響しません。
Particle Editor のParticles領域のMaximumフィールドを参照する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 ファイルへのドロップボックス リンクは次のとおりです。