以随机间隔无限期调用函数

时间:2017-11-19 05:23:32

标签: swift sprite-kit

制作一个快速游戏。试图激活功能" fireFrisbee"永远在0-3秒之间的随机时间间隔。

iphone模拟显示白屏。该功能似乎只激活一次(只听到一个飞盘发射声)

let action = SKAction.sequence([SKAction.run(fireFrisbee), SKAction.wait(forDuration: TimeInterval(arc4random_uniform(3)))])

run(SKAction.repeatForever(action))

我在override func didMove(to view: SKView) {

下面有这行代码

1 个答案:

答案 0 :(得分:3)

有几点要注意,如果该代码有效,你可能遇到一些问题,其中飞盘设置为3秒触发,然后它再次运行动作,下一个可以在0秒触发(动作加倍)并且下一个动作可能会在0秒时触发(动作增加三倍)有点混乱。

但是该代码无论如何都不会起作用,发生的事情是你得到一个随机值TimeInterval(arc4random_uniform(3)),但你实际上很难用该随机值编写该动作。当动作重复时,它将始终具有该硬编码随机值。因此,如果您第一次运行它并生成随机2,它将始终每2秒运行一次。

有几种方法可以做到这一点你可以在你的update func中放一个随机生成器来调用fireFrisbee。或者你可以创建一个带有完成调用的递归动作,它会在完成后自动激活....

let wait = SKAction.wait(forDuration: 5)
run(wait) {
    self.setupFireFrisbee() 
}

func setupFireFrisbee() {
    action = SKAction.sequence([SKAction.run(fireFrisbee), SKAction.wait(forDuration: TimeInterval(arc4random_uniform(3)))])
    //completion shortcut {} after action
    run(action) {
        self.setupFireFrisbee() 
    }
}