Podczas korzystania z SKEmitterNode z maksymalną liczbą cząstek na liczbę, dokumentacja mówi, że przestanie generować cząstki. Moje pytanie brzmi: czy istnieje sposób, aby powiedzieć, że tak się stało? Chcę usunąć emitera cząstek ze sceny, gdy wykonała swoją pracę.Jak mogę sprawdzić, kiedy węzeł SKEmitterNode osiągnął maksymalną liczbę cząstek?
Odpowiedz
Można obliczyć, kiedy emiter jest gotowy.
Na przykład, jeśli numParticlesToEmit
jest ustawione na 1000, a particleBirthRate
ma wartość 100, cząstka zostanie wykonana, wysyłając nowe cząstki po 10 sekundach. Następnie musisz dodać particleLifeTime
z połową particleLifeTimeRange
, aby uwzględnić fakt, że cząsteczki czasu pozostaną na ekranie. Następnie emiter nie tylko emituje nowe cząstki, ale także ostatnią i/lub najdłużej emitowaną cząstkę zostanie usunięta z ekranu.
Zakładając em
to emiter:
CGFloat seconds = em.numParticlesToEmit/em.particleBirthRate +
em.particleLifetime + em.particleLifetimeRange/2;
Następnie można wykonać selektora z czasem oczekiwania lub uruchomić akcję z danym zwłoki być powiadomiony, gdy emiter cząstek jest wykonywana.
Nie jestem w stanie znaleźć sposobu na sprawdzenie liczby aktywnych cząstek. Myślałem, że może to było możliwe z własnością dzieci dziedziczy po SKNode, ale to nie działa.
zauważył, że właściwość particleAction AN SKEmitterNode, który zawiera ten blurb:
Dodawanie skomplikowanych działań cząstek może poważnie wpływać na osiągi emitera cząstek. Ponadto, ponieważ cząstki nie istnieją jako jawny węzeł, którym można manipulować, nie można usunąć akcji z istniejących cząstek.
Jest możliwe, że możesz wykorzystać SKAction performSelector do powiadamiania o aktywnych cząsteczkach. Kiedy skończy się ten strumień, możesz założyć, że nie pozostały żadne cząstki.
Niezbyt eleganckie lub idealne rozwiązanie w żaden sposób, a ja sam byłbym zainteresowany lepszym rozwiązaniem na pewno.
O wiele lepsze rozwiązanie, zupełnie błędnie przeczytałem pytanie iz jakiegoś powodu myślałem, że numParticlesToEmit było nieznane. Matematyka jest cudowna. – prototypical