理解iOS Swift 2中的随机数

理解iOS Swift 2中的随机数,ios,swift,random,arc4random,Ios,Swift,Random,Arc4random,如何使随机数在程序中随着时间的推移而不断变化(即,每次我想使用它时,它都会成为范围内的新随机数) 我被难住了。我已经阅读了20多篇关于如何用这种语言生成随机数的帖子和文章(我对这种语言很陌生),但我似乎无法让它发挥作用 我基本上是在尝试从1.0-3.0随机获得一个双精度。我可以很容易地做到这一点,但一旦它选择了这个数字,它就不会改变。这是我使用的代码: var randomNumber:Double = (Double(arc4random() % 3) + 1); 然后我将其用作该行的值:

如何使随机数在程序中随着时间的推移而不断变化(即,每次我想使用它时,它都会成为范围内的新随机数)

我被难住了。我已经阅读了20多篇关于如何用这种语言生成随机数的帖子和文章(我对这种语言很陌生),但我似乎无法让它发挥作用

我基本上是在尝试从1.0-3.0随机获得一个双精度。我可以很容易地做到这一点,但一旦它选择了这个数字,它就不会改变。这是我使用的代码:

var randomNumber:Double = (Double(arc4random() % 3) + 1);
然后我将其用作该行的值:

SKAction.waitForDuration(randomNumber)
每次运行此程序时,我都想再次更改该数字,但一旦程序启动,它将继续使用相同的数字(每次重置程序时都会有所不同)

我知道如何生成号码,但我似乎找不到任何更新它

我试着加上

randomNumber = (Double(arc4random() % 3) + 1);
在代码中,它将被多次运行,但它仍然给了我同样的东西

<>我非常熟悉C++,所以如果你想解释一些东西,你可以参考它的风格,我很可能会理解。

< p>试试这个代码:

func randomNumberBetween1_0And3_0() -> Double {
    return 1 + Double(arc4random_uniform(2000)) / 1000.0
}

for index in 1...10 {
    print(randomNumberBetween1_0And3_0())
}
样本输出为: 2.087 1.367 1.867 1.32 2.402 1.803 1.325 1.703 2.069
2.335

您需要的是一个只读计算属性,它将在每次尝试访问时返回一个新的随机数:

var randomNumber: Double {
    return Double(arc4random_uniform(3).successor())
}

print(randomNumber)  // 2.0
print(randomNumber)  // 2.0
print(randomNumber)  // 1.0
print(randomNumber)  // 3.0
print(randomNumber)  // 3.0
使用:

其中,sec是您要使用的时间范围的中间值,因为范围是朝+方向的

因此,在您的情况下,您希望:

SKAction.waitForDuration(2, withRange: 2),  this will get you a range of 1 to 3 (-1 to 1 range)
如果出于某种原因,您需要一种能够不断创建新随机等待的方法,您可以始终执行以下操作:

extension SKAction
{
    func waitForRandomDuration() -> SKAction
    {
        var randomNumber:Double = (Double(arc4random() % 3) + 1);
        return SKAction.waitForDuration(randomNumber);

    }
}

然后确保每次需要完成时都将其作为新操作添加到精灵中,如果将其存储到变量中,则随机性不会改变。

记住
randomNumber
是一个变量,而不是函数指针,所以当您说
SKAction.waitForDuration(randomNumber)时
你真的在说var
randomNumber=3;SKAction.waitForDuration(3)
每次。你需要先创建一个新的随机数,然后用这个新的随机数创建一个新的waifForDuration,并将这个新动作添加到spritestanks!!!这更有意义,唯一的问题是我想我可能有一个更具体的问题。我正在使用
runAction(SKAction.repeatActionForever(SKAction.sequence([SKAction.runBlock(addMonster),SKAction.waitForDuration(randomNumber)])
但是当我使用您的代码时,我仍然得到相同的数字。有什么想法吗?唯一的问题是我的方法也不起作用,因为返回的操作将是静态的,就像他使用它的方式一样。这看起来很好,但我如何将其实现为SKAction序列?当我执行
SKAction.waitForRandomDuration()时,我得到错误:“调用中缺少参数#1的参数。我必须输入哪些参数?我更新了您想要执行的操作的答案,我几乎忘记了withRange子句。我不知道为什么您会遇到缺少参数的错误,但在使用methodNow进行此更新时,我会得到错误<代码>”调用“
中的无关参数标签“sec:”所以我尝试忽略它,结果成功了!谢谢!!是的,我忘了去掉第一个参数名,不需要它这不是整数等等,我希望可以
extension SKAction
{
    func waitForRandomDuration() -> SKAction
    {
        var randomNumber:Double = (Double(arc4random() % 3) + 1);
        return SKAction.waitForDuration(randomNumber);

    }
}