是否可以更改粒子发射的频率?例如,如果我有一个粒子正在发射,我能否让它每隔5或10秒发射一次?
我搜索了文档,但没有找到任何相关信息。有什么解决方法吗?我想做类似以下的事情:
emitter.particleBirthRate = 1
emitter.particleBirthRateFrequency = 5 // this does not exist
是否可以更改粒子发射的频率?例如,如果我有一个粒子正在发射,我能否让它每隔5或10秒发射一次?
我搜索了文档,但没有找到任何相关信息。有什么解决方法吗?我想做类似以下的事情:
emitter.particleBirthRate = 1
emitter.particleBirthRateFrequency = 5 // this does not exist
我避免使用定时器,在SpriteKit中真的没有必要使用它们。
你可以使用update函数中的内置计时器功能,或者只需使用动作来控制时间。
你可能正在寻找的是particle.resetSimulation()。
我会这样做:
你还可以在动作上添加一个key,并通过名称停止它,需要时随时停止。
if let spark = self.childNode(withName: "sparkin") as? SKEmitterNode {
self.spark = spark
//set time here to how long in between restarting the emitter
let waiter = SKAction.wait(forDuration: 5)
let resetter = SKAction.run( { self.spark.resetSimulation() } )
let seq = SKAction.sequence([waiter, resetter])
let repeater = SKAction.repeatForever(seq)
run(repeater)
}
我也遇到了同样的问题。现在使用计时器与spritekit一起使用被视为不好的做法,但这是我让它工作的方法。
我在XCODE粒子编辑器中创建了所需的SKEmitterNode.sks,并使用计时器使其发射。
var count = 0
//Create an emitter every 5 seconds
timer = Timer.scheduledTimer(withTimeInterval: 5 , repeats: true){ t in
count += 1
let emitter = SKEmitterNode(fileNamed: "emitter")
emitter?.targetNode = self
emitter?.position = self.nodeA.position
emitter?.zPosition = -5
self.addChild(emitter!)
//Remove the emitter node after 5 seconds
_ = Timer.scheduledTimer(withTimeInterval: 5, repeats: true){_ in
emitter?.removeFromParent()
}
if count == 10 {
t.invalidate()
}
}
timer.invalidate()