Удалить SKEmitterNode, когда анимация частиц заканчивается [дублировать]

Это наилучшее решение , которое я нашел до сих пор.

Предположим, что у нас есть пакет с именем org.mypackage, содержащий классы:

  • HelloWorld (основной класс)
  • SupportClass
  • UtilClass

и файлы, определяющие этот пакет, хранятся физически в каталоге D:\myprogram (в Windows ) или /home/user/myprogram (в Linux).

Структура файла будет выглядеть так:

Когда мы вызываем Java, мы указываем имя приложение для запуска: org.mypackage.HelloWorld. Однако мы также должны сказать Java, где искать файлы и каталоги, определяющие наш пакет. Поэтому для запуска программы мы должны использовать следующую команду:

ПРИМЕЧАНИЕ. Вы должны выполнить вышеуказанную команду java, независимо от того, какое ваше текущее местоположение , Но это не относится к javac. Для компиляции вы можете даже напрямую перейти в каталог, в котором у вас есть файлы .java, и напрямую выполнить javac ClassName.java.

3
задан mert 30 July 2015 в 16:37
поделиться

2 ответа

particleLifetime определяет среднее время жизни частицы в секундах. Это не влияет на удаление SKEmitterNode из родителя.

numOfParticlesToEmit, который относится к полю Maximum в области Particles редактора частиц, определяет количество частиц, которые эмиттер должен излучать до остановки. Это не влияет на удаление SKEmitterNode из родителя. Также обратите внимание, что вы установили 0 в этом поле, которое позволит бесконечно испускать.

Итак, если вы хотите удалить узел из родителя, когда эмиттер сделан с испусканием, вы можете установить количество частиц для испускания (поле под названием Maximum в области Particles внутри редактора) и запустить последовательность 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!)



    }


}

И вот результат (обратите внимание, что счет узла изменяется после испускания):

Надеюсь, что это поможет

EDIT:

Для тех, кто заинтересован в том, как сделать аналогичный эффект, как из видео выше, попробуйте что-то вроде этого:

Цель состоит в том, чтобы использовать Color Ramp и выбрать Add для режима наложения.

dropbox ссылку на .sks файл: Effect.sks

14
ответ дан Whirlwind 21 August 2018 в 08:47
поделиться
  • 1
    Более точная длительность излучателя будет примерно такой: let duration = Double(emitter.numParticlesToEmit) / Double(emitter.particleBirthRate) + Double(emitter.particleLifetime + emitter.particleLifetimeRange/2) – Kawin P. 1 March 2017 в 11:45
  • 2
    Это очень крутая анимация SKEmitterNode! Не могли бы вы поделиться файлом SKS (или объяснить, как его воссоздать)? – Crashalot 9 November 2017 в 02:31
  • 3
    @Crashalot Я попытался воссоздать его, и я думаю, у меня есть кое-что, что может дать вам базовую идею о том, как получить аналогичный эффект. Простите, это было два года назад, и я забыл, что такое точная настройка. – Whirlwind 9 November 2017 в 22:21
  • 4
    Благодаря! Также как вы его создали, чтобы создать полуструктурированную анимацию по часовой стрелке? Это другой интересный бит. – Crashalot 9 November 2017 в 22:45
  • 5
    Ahhh движение по часовой стрелке не было программным и ни одного узла-эмиттера ... Я думал, что вы создаете этот эффект с одним эмиттерным узлом, все еще очень классно! :) – Crashalot 10 November 2017 в 00:57

Установите значение «BirthRate» и «Максимум» для частицы равным 20. Установка max в 0 будет повторять рождение.

image [/g0]

0
ответ дан Andy 21 August 2018 в 08:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: