如何让SKAction.sequence等待一个随机的持续时间

时间:2015-02-19 03:30:27

标签: swift sprite-kit skaction

我正试图打开一扇门,等待一段随机时间(在一定范围内),然后关闭。如果我使用SKAction.waitForDuration,我可以设置等待的确切时间,这是有效的。但是,如果我使用SKAction.waitForDuration(withRange),它总是在该范围内的最短时间打开。如何在该范围内的其他时间打开它?任何帮助将不胜感激!谢谢!

这是我的代码:

var doorAction = SKAction.moveTo(CGPoint(x: size.width * 0.5, y: size.height + size.height * 1.95), duration: NSTimeInterval(1))

// randomWait should give me a value between 10 & 30, but door always opens at 10 

var randomWait = SKAction.waitForDuration(20.0, withRange: 20.0)

// waitAction works fine, but I want a value between 10 and 30                
// var waitAction = SKAction.waitForDuration(10) 

var doorReturnAction = SKAction.moveTo(CGPoint(x: size.width * 0.5, y: size.height * 2.18), duration: NSTimeInterval(1))

var actionSequence = SKAction.sequence([doorAction, randomWait, doorReturnAction])

self.runAction(actionSequence)

2 个答案:

答案 0 :(得分:1)

由于您没有重复动作序列,因此您并不需要SKAction.waitForDuration:withRange:。您可以使用arc4random()

计算waitDuration
let upperlimit : UInt32 = 30
let lowerlimit : UInt32 = 10

let waitDuration = NSTimeInterval(CGFloat(arc4random() % ((upperlimit - lowerlimit) * 10) + lowerlimit * 10)/10.0)

var randomWait = SKAction.waitForDuration(waitDuration)

答案 1 :(得分:0)

来自文档。

  

秒 - 等待的平均时间。

     

durationRange - 持续时间的可能值范围。

如果将20设置为平均值,并且范围仅达到20,那么唯一可以满足的方法是始终打开20.您应该尝试将第一个参数(平均值)设置为接近于如果你希望行为不那么统一,那么范围的中间。