停止 SKEmitterNode 发射粒子
Stop SKEmitterNode to emit particles
我有一个 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)
发射器不会停止,动画继续。
我发现这是我的代码的问题。我试图停止在计算机 属性 中创建的发射器节点,因此在它被访问时被分配。实例显然不一样,发射器节点也没有停止。这是我的建议。不要将计算机属性的语法与用闭包初始化 属性 的语法混淆。这两段代码非常不同:
// 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
}
我有一个 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)
发射器不会停止,动画继续。
我发现这是我的代码的问题。我试图停止在计算机 属性 中创建的发射器节点,因此在它被访问时被分配。实例显然不一样,发射器节点也没有停止。这是我的建议。不要将计算机属性的语法与用闭包初始化 属性 的语法混淆。这两段代码非常不同:
// 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
}