2016-02-09 39 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

您是在模擬器上測試它還是使用實際設備?因爲根據我使用的設備(設備vs sim)和基於我使用的iOS版本,我得到了非常不同的結果。 – Whirlwind

+0

你可以發佈一個鏈接到你的粒子發射器..以及任何代碼,我需要得到這個運行在我的結局..像border.CGPath變量。如果你這樣做,我可以給它一個鏡頭。 – hamobi

+0

@Whirlwind我正在模擬器上進行測試,並且使用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 
}