私は自分の小さなゲームで SKEmitterNode をいじっています。キャノン ボールを撃っていて、ボールがシーン内のボックスの 1 つに当たると、ボックスが破壊され、単純なテクスチャ「BOOM」のパーティクル エフェクトが作成され、ボックスが消えるときにトランジションが発生します。問題は、エミッタを起動するとすぐにパーティクルの放出が開始されることを期待しているのですが、そうではなく、0.5 ~ 1 秒の短い遅延の後にパーティクルが再生されることです。
エミッタを作成するための私の関数は次のとおりです。
func createParticleEmitter(fileName: String) -> SKEmitterNode
{
let path = NSBundle.mainBundle().pathForResource(fileName, ofType: "sks")
assert(path != nil, "Could not find file \(fileName)")
let obj : AnyObject? = NSKeyedUnarchiver.unarchiveObjectWithFile(path!)
assert(obj != nil, "The emiter \(fileName) could not be created")
return obj as! SKEmitterNode
}
その後、衝突時に、この関数が呼び出されます。ここで、position は死にかけているオブジェクトの位置であり、scene は死にかけているオブジェクトの親シーンです。
func addOnDeathParticles(position: CGPoint, scene : SKNode)
{
var emitter : SKEmitterNode = createParticleEmitter("boom")
emitter.position = position
let seq = [SKAction.waitForDuration(PARTICLE_DIE_DURATION,
withRange:PARTICLE_DIE_DURATION_RANGE),
SKAction.removeFromParent()]
emitter.runAction(SKAction.sequence(seq))
scene.addChild(emitter)
}
アクション リストが追加され、PARTICLE_DIE_DURATION_RANGE のランダム値で PARTICLE_DIE_DURATION の後にエミッターが消えます。
私が理解しているように、エミッターがシーンにアタッチされるとすぐに、パーティクルの放出が開始されるはずです。しかし、最初に述べたように、これは事実ではなく、パーティクルは 0.5 ~ 1 秒後に表示され始めます。作成されたパーティクルは、拡大してゆっくりと回転する単なるテクスチャですが、遅延は設定されていません (それができるかどうかさえわかりません)。
誰かが同じ行動をしたか、私が間違っていることを提案していますか? 助けていただければ幸いです:)
乾杯、TK