我希望能夠根據得分關閉和開啓我的SKEmitterNode(雨滴粒子)。但是我的更新函數會不斷地被調用,也就是說,我最終會在屏幕上顯示數百萬個粒子,並且當前代碼在下面......我如何構造代碼,以便在達到分數時只會調用一次雨粒子?如何打開分數以使用SpriteKit創建SKEmitterNode?
class GameScene: SKScene, SKPhysicsContactDelegate {
func setUpRain() {
if let rainParticle = SKEmitterNode(fileNamed: "Rain") {
rainParticle.position = CGPointMake(frame.size.width, frame.size.height)
rainParticle.name = "rainParticle"
rainParticle.zPosition = Layer.Flash.rawValue
worldNode.addChild(rainParticle)
}
}
func makeItRain() {
let startRaining = SKAction.runBlock {
self.setUpRain()
}
runAction(startRaining, withKey: "Rain")
}
func stopRaining() {
removeActionForKey("Rain")
worldNode.enumerateChildNodesWithName("rainParticle", usingBlock: { node, stop in
node.removeFromParent()
})
}
}
class PlayingState: GKState {
unowned let scene: GameScene //used to gain access to our scene
override func updateWithDeltaTime(seconds: NSTimeInterval) {
scene.updateForegroundAndBackground()
scene.updateScore()
if scene.score > 2 {
scene.makeItRain()
}
if scene.score > 4 {
scene.stopRaining()
}
}
設置你的發射器發出一定數量的粒子。創建一個'SKAction'序列,添加一個發射器,等待它完成發射,並將其從父代中移除...類似這樣的內容:http://stackoverflow.com/a/31731439/3402095如果您感興趣的是哪些屬性一個'SKEmitterNode'與設置所有這些相關,請告訴我。 – Whirlwind
非常感謝!我認爲我應該遵循,但是發射器(1)出生率和(2)最大值和生命期(1)開始和(2)範圍是什麼類型的值是爲了給出一個短暫的陣雨效果,然後停止? – GarySabo
我看到你已經知道哪些屬性是相關的,但是如何下雨,那是你的工作,你必須玩弄它。 :) – Whirlwind