Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 在SpriteKit中创建随机数_Swift_Random_Sprite Kit_Int - Fatal编程技术网

Swift 在SpriteKit中创建随机数

Swift 在SpriteKit中创建随机数,swift,random,sprite-kit,int,Swift,Random,Sprite Kit,Int,我正在尝试创建一个游戏,在这个游戏中,投射物以随机角度发射。 要做到这一点,我需要能够生成两个随机整数。我查阅了一些教程,得出了以下结论: var random = CGFloat(Int(arc4random()) % 1500) var random2 = CGFloat(Int(arc4random()) % -300) self.addChild(bullet) bullet.physicsBody!.velocity = CGVectorMake((random2), (random)

我正在尝试创建一个游戏,在这个游戏中,投射物以随机角度发射。 要做到这一点,我需要能够生成两个随机整数。我查阅了一些教程,得出了以下结论:

var random = CGFloat(Int(arc4random()) % 1500)
var random2 = CGFloat(Int(arc4random()) % -300)
self.addChild(bullet)
bullet.physicsBody!.velocity = CGVectorMake((random2), (random))
它工作了一段时间,但现在只是崩溃了


任何帮助都将不胜感激。

我发现我使用最多的是arc4random_uniformupperBound,它返回从零到上限-1的随机整数

let random = arc4random_uniform(1500)
let random2 = arc4random_uniform(300) * -1

//pick a number between 1 and 10
let pick = arc4random_uniform(10)+1
arc4功能的下限:

GameplayKit有一个很好的类包装了arc4函数:


还有一个方便的参考资料:

我发现我使用最多的是arc4random_uniformupperBound,它返回一个从零到上限-1的随机整数

let random = arc4random_uniform(1500)
let random2 = arc4random_uniform(300) * -1

//pick a number between 1 and 10
let pick = arc4random_uniform(10)+1
arc4功能的下限:

GameplayKit有一个很好的类包装了arc4函数:


还有一个方便的参考资料:

我不太理解你的问题,但我认为它可能有用:

func getRandomPointFromCircle(radius:Float, center:CGPoint) -> CGPoint {
     let randomAngle = Float(arc4random())/Float(UInt32.max-1) * Float(M_PI) * 2.0
     // polar => cartesian
     let x = radius * cosf(theta)
     let y = radius * sinf(theta)
     return CGPointMake(CGFloat(x)+center.x,CGFloat(y)+center.y)
}

我不太理解你的问题,但我认为它可能有用:

func getRandomPointFromCircle(radius:Float, center:CGPoint) -> CGPoint {
     let randomAngle = Float(arc4random())/Float(UInt32.max-1) * Float(M_PI) * 2.0
     // polar => cartesian
     let x = radius * cosf(theta)
     let y = radius * sinf(theta)
     return CGPointMake(CGFloat(x)+center.x,CGFloat(y)+center.y)
}

如果它崩溃了,您可能有更多的信息要共享。它在哪里崩溃?堆栈跟踪显示了什么?这可能和随机数的产生并没有直接关系,而是和其他一些事情有关。Bullet没有物理实体,或者Bullet已经有了父对象。我想这个问题更多的是关于获取随机值,而不是关于崩溃,nickfalk可能是对的,崩溃是不相关的。这肯定是随机数,我用普通整数替换了它们,它没有崩溃。然后我会怀疑带负数的模是一个问题,但代码中的某些内容“工作一段时间”,然后在没有其他更改的情况下开始崩溃是非常罕见的。如果它崩溃,您可能有更多信息要共享。它在哪里崩溃?堆栈跟踪显示了什么?这可能和随机数的产生并没有直接关系,而是和其他一些事情有关。Bullet没有物理实体,或者Bullet已经有了父对象。我想这个问题更多的是关于获取随机值,而不是关于崩溃,nickfalk可能是对的,崩溃是不相关的。这肯定是随机数,我用普通整数替换了它们,它没有崩溃。然后我会怀疑带负数的模是个问题,但代码中的某些内容“工作一段时间”,然后在没有其他更改的情况下开始崩溃是非常罕见的。arc4random的范围已设为UInt32.max,因此,不需要统一arc4random的范围已经设置为UInt32.max,因此不需要统一arc4random还应提及不使用模运算的arc4random。它创建的数字分布不相等,即不随机。总之:-回答得好。arc4random的分布是不相等的,所以不是数字不是随机的,而是一些值会更频繁地出现。arc4_统一在其范围内提供了相等的分布,并且消除了模计算的需要。对不起,我的错,忘记了arc4random_统一中的随机数。编辑答案。好的,现在测试它。顺便说一句,你回复得很快。你还应该提到不要对arc4random使用模运算。它创建的数字分布不相等,即不随机。总之:-回答得好。arc4random的分布是不相等的,所以不是数字不是随机的,而是一些值会更频繁地出现。arc4_统一在其范围内提供了相等的分布,并且消除了模计算的需要。对不起,我的错,忘记了arc4random_统一中的随机数。编辑答案。好的,现在测试它。顺便说一句,你回复得很快。