Это наилучшее решение , которое я нашел до сих пор.
Предположим, что у нас есть пакет с именем org.mypackage
, содержащий классы:
и файлы, определяющие этот пакет, хранятся физически в каталоге D:\myprogram
(в Windows ) или /home/user/myprogram
(в Linux).
Структура файла будет выглядеть так:
Когда мы вызываем Java, мы указываем имя приложение для запуска: org.mypackage.HelloWorld
. Однако мы также должны сказать Java, где искать файлы и каталоги, определяющие наш пакет. Поэтому для запуска программы мы должны использовать следующую команду:
ПРИМЕЧАНИЕ. Вы должны выполнить вышеуказанную команду
java
, независимо от того, какое ваше текущее местоположение , Но это не относится кjavac
. Для компиляции вы можете даже напрямую перейти в каталог, в котором у вас есть файлы.java
, и напрямую выполнитьjavac ClassName.java
.
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
Установите значение «BirthRate» и «Максимум» для частицы равным 20. Установка max в 0 будет повторять рождение.
[/g0]
let duration = Double(emitter.numParticlesToEmit) / Double(emitter.particleBirthRate) + Double(emitter.particleLifetime + emitter.particleLifetimeRange/2)
– Kawin P. 1 March 2017 в 11:45