【问题标题】:How to get an SKAction.sequence to wait for a random duration如何让 SKAction.sequence 等待随机持续时间
【发布时间】:2015-02-19 03:30:26
【问题描述】:

我正在尝试打开一扇门,等待随机时间(在一定范围内)然后关闭。如果我使用 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)

【问题讨论】:

  • 从您的代码中,随机等待应该发生在 10 秒到 30 秒的范围内。你是说这不适合你吗?
  • 对,等待总是正好 10 秒(如果我使用不同的范围,则为该范围内的最低可用数字)
  • 感谢您清理代码的外观,顺便说一句!
  • 参数不是范围的两端,它们是平均持续时间,以及可以选择的范围。

标签: swift sprite-kit skaction


【解决方案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)

【讨论】:

    【解决方案2】:

    来自文档。

    sec - 平均等待时间。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      • 2014-04-21
      • 1970-01-01
      • 2014-01-24
      • 2015-07-28
      • 2021-12-03
      相关资源
      最近更新 更多