iOS SpriteKit发射器粒子频率

3

是否可以更改粒子发射的频率?例如,如果我有一个粒子正在发射,我能否让它每隔5或10秒发射一次?

我搜索了文档,但没有找到任何相关信息。有什么解决方法吗?我想做类似以下的事情:

   emitter.particleBirthRate = 1
   emitter.particleBirthRateFrequency = 5  // this does not exist
2个回答

4

我避免使用定时器,在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)
}

1

我也遇到了同样的问题。现在使用计时器与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()
        }
    }

当您呈现新场景时,重要的事情是使计时器失效,否则当计数达到时,旧场景只会deinit {}。
 timer.invalidate()

 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接