如何在SpriteKit序列中获得不同的随机延迟?

时间:2017-01-24 19:24:11

标签: swift sprite-kit

我有一个序列,我产生一个障碍,然后等待一段随机的时间,但如果我运行游戏,例如第一次随机延迟1.4秒,但它不仅仅是第一次延迟它'只是所有的时间1.4并且它没有变化(它不必是1.4它只是一个例子)。我试图创建一个具有随机返回值的函数,但它不起作用。我不知道我怎么能解决这个问题。这是我的具有随机返回值的函数的代码。如果它有助于obstSwitch()是创建障碍的函数:

    func getRandomDelay() ->Double {
    let randomNumber = arc4random_uniform(20) + 5
    let randomDelay: Double = Double(randomNumber) / 10
    print(randomDelay)
    return randomDelay
}

并且继承了游戏开始时调用的功能:

func gameStarted() {
    gameAbleToStart = false
    moveLine()
    scoreTimer()
    let runObstSwitch = SKAction.run {
        self.obstSwitch()
    }
    let wait = SKAction.wait(forDuration: getRandomDelay())
    let sequence = SKAction.sequence([runObstSwitch, wait])
    self.run(SKAction.repeatForever(sequence))
}

1 个答案:

答案 0 :(得分:1)

let wait = SKAction.wait(forDuration: getRandomDelay())
let sequence = SKAction.sequence([runObstSwitch, wait])

创建一次wait动作,然后在序列中使用 所以在runObstSwitch之间花费了相同的空闲时间 动作。

如果您希望空闲时间可变,请使用 而是wait(forDuration:withRange:)。例如

let wait = SKAction.wait(forDuration: 1.5, withRange: 2.0)
let sequence = SKAction.sequence([runObstSwitch, wait])

延迟将是1.5-2.0 / 2 = 0.5和1.5 + 2.0 / 2 = 2.5秒之间的随机数,每次执行都会有所不同。