2

私は自分の小さなゲームで 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

4

1 に答える 1

0

解決策は、advanceSimulationTime を正確に 1.0 秒に設定することでした。なぜそうなのかはよくわかりませんが、今回は「アニメーション」という創作が取り上げられているのではないでしょうか。

とにかく、解決策を提案してくれた lchamp をはじめ、全員の助けに感謝します。

于 2015-06-15T19:30:54.913 に答える