2016-02-09 4 views
2

У меня есть SKEmitterNode, и я пытаюсь остановить его при нажатии кнопки. Добавить свой узел таким образом:Остановить SKEmitterNode для извлечения частиц

let followLine = SKAction.followPath(border.CGPath, asOffset: false, orientToPath: true, duration: 2.0) 
let loopAction = SKAction.repeatActionForever(followLine) 
emitterNode.targetNode = scene 
emitterNode.runAction(loopAction, withKey: "loop") 
addChild(emitterNode) 

добавляет emitterNode к моим SKScene и когда я хочу, чтобы остановить частицы Я перепробовал все эти возможные пути:

let action = SKAction.runBlock { [weak self] in 
    self?.emitterNode.particleBirthRate = 0 
} 
emitterNode.runAction(action) 


emitterNode.removeAllActions() 
emitterNode.removeFromParent() 


removeAllActions() 


let remove = SKAction.removeFromParent() 
emitterNode.removeActionForKey("loop") 
emitterNode.runAction(remove) 

Излучатель не прекращается и анимация продолжается.

+0

Вы тестируете это на Симуляторе или используете фактическое устройство? Потому что я получаю очень разные результаты, основанные на том, что я использую (устройство против sim), и на основе той версии iOS, которую я использую. – Whirlwind

+0

вы можете разместить ссылку на свой излучатель частиц .. вместе с любым кодом, который мне нужен, чтобы это выполнялось на моем конце .. как переменная border.CGPath. Если вы сделаете это, я могу дать ему шанс. – hamobi

+0

@Whirlwind Я тестирую на Simulator и с iOS 9.3 beta 2 и Xcode 7.3 beta 2. – BalestraPatrick

ответ

0

Я понял, что это проблема с моим кодом. Я пытался остановить узел эмиттера, который был создан в свойстве компьютера, и поэтому ему было предоставлено очень много времени для его доступа. Экземпляр явно не был таким же, и узел эмиттера не останавливался. Это мой совет. Не путайте синтаксис свойств компьютера с синтаксисом для инициализации свойства с закрытием. Эти две части кода очень разные:

// Created only once 
var laserButton: ParticlesLoadingButton = { 
    let button = ParticlesLoadingButton(frame: CGRect(x: 100, y: 100, width: 200, height: 100)) 
    button.particleEffect = .Laser 
    button.particleColor = UIColor.orangeColor() 
    return button 
}() 

// Created every time it is accessed 
var laserButton2: ParticlesLoadingButton { 
    let button = ParticlesLoadingButton(frame: CGRect(x: 100, y: 100, width: 200, height: 100)) 
    button.particleEffect = .Laser 
    return button 
}