5

SKEmitterNode を mainScene の childNode として追加しましたが、Apple docsparticleLifetimeのように説明されているように、終了時に削除されると予想されていました。

このようなエミッターを追加しました。

    var emitterPath : String = NSBundle.mainBundle().pathForResource("ShipFire", ofType: "sks")!
    var emitter : SKEmitterNode = NSKeyedUnarchiver.unarchiveObjectWithFile(emitterPath) as! SKEmitterNode

    emitter.position = position
    emitter.particleLifetime = 0.1;

    self.addChild(emitter)

下の画像のような私の SKEmitterNode プロパティ ShipEngine.sks

実行すると、エミッターが画面から削除されません。

シミュレーター

さらに情報が必要な場合は、さらに何を追加すればよいかわかりません。助けを求めてください。ありがとうございます。

4

2 に答える 2

18

パーティクルのライフタイムは、パーティクルの平均寿命を秒単位で決定します。親からの 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 ファイルへのドロップボックス リンクは次のとおりです

于 2015-07-30T18:30:51.610 に答える
0

Particle の "BirthRate" と "Maximum" の両方を 20 に設定します。最大値を 0 に設定すると、誕生が繰り返されます。

画像

于 2015-12-10T15:15:54.880 に答える