2016-12-05 5 views
2

Ich habe einen Partikeleffekt für eine Mündungsfackel eingerichtet. Was ich gerade benutze, ist ein niedriger numParticlesToEmit, um den Emitter auf einen kurzen Burst zu beschränken, und resetSimulation() für den Emitter, wenn ich einen neuen Partikelstoß starten möchte.SKEmitterNode neu starten ohne Partikel zu entfernen

Das Problem, das ich habe, ist, dass resetSimulation() alle Partikel auf dem Bildschirm entfernt, und ich muss oft einen neuen Ausbruch von Partikeln erstellen, bevor die vorherigen Partikel verschwinden, so dass sie früh gelöscht werden.

Gibt es einen sauberen Weg, den Emitter wieder zu starten, ohne die Partikel bereits auf dem Bildschirm zu löschen?

Antwort

3

Normalerweise haben Partikelsysteme eine Eigenschaft, die bei SKEmitters fehlt: eine Dauer. Dies steuert, wie lange ein System ausstrahlt. Ich sehe das nicht in SKEmitter, obwohl er in seine SCNParticleSystems

Es macht nichts, eine Arbeit um:

SKEmitters hat eine numParticlesToEmit Eigenschaft und ein particleBirthRate. Zusammen bestimmen diese, wie lange das Partikelsystem vor dem Herunterfahren ausstrahlt.

Mit diesen als eine Kontrolle der Emission ist es möglich, Pulse von Teilchen zu erzeugen, die auf die Art ausgesendet werden, die Sie für etwas wie einen Mündungsblitz oder eine Explosion wünschen.

Ich bin mir nicht sicher, ob es sich removes selbst wenn es dieses Limit erreicht. Wenn nicht, müssen Sie eine Entfernungsfunktion erstellen. Denn der Weg zum gewünschten Effekt (mehrere Mündungsblitze auf dem Bildschirm) ist copy() der SKEmitter. Dies ist ziemlich effizient, also machen Sie sich keine Sorgen über den Overhead.

+0

Ja, das funktioniert gut. Eine schnelle SKAction-Sequenz von wait, dann removeFromParent behandelt das Entfernen gut genug. – Zek

2

Es gibt eine targetNode auf SKEmitters, die die Partikel zu einem anderen Knoten verschieben sollen, so dass beim Zurücksetzen des Emitters die vorherigen Partikel noch bleiben. Leider ist dies immer noch von dem, was ich sagen kann, abgehört, es sei denn, jemand anders hat herausgefunden, wie es funktioniert und ich habe es gerade verpasst. Denken Sie daran, für den Fall, dass sie es jemals beheben.

+0

BTW, SCNPlanes mit einem SKScene von Partikeln funktionieren für Ihr Problem, zwei Instanzen des gleichen Partikels in mehreren Positionen/Ansichten zu benötigen. Der einzige Trick, den SCNScene in dein SKScene zu bekommen. – Confused

+0

Das erfordert, dass sk3dnode bereits davon wusste, aber es ist eine wahnsinnige Chaos-Rendering – Knight0fDragon

0

Hallo Zukunft Leser zu helfen, der Code, den ich die Dauer des Emitters zu berechnen verwenden, ist dies:

let duration = Double(emitter.numParticlesToEmit)/Double(emitter.particleBirthRate) + Double(emitter.particleLifetime + emitter.particleLifetimeRange/2)

Es funktioniert für mich perfekt

Erweiterung:

extension SKEmitterNode { 
    var emitterDuration: Double { 
     return Double(numParticlesToEmit)/Double(particleBirthRate) + Double(particleLifetime + particleLifetimeRange/2) 
    } 
} 
Verwandte Themen