X,Y坐标的随机数生成器

时间:2015-07-28 21:48:02

标签: swift random numbers generator

我今天正在编写代码,我偶然发现了随机数生成器的问题。我正在努力制造一个像水果忍者那样的发电机,我也在迅速写作。以下是我的代码片段:

var rand_x = arc4random() 
var rand_y = arc4random()
node!.position = CGPoint(x: rand_x, y: rand_y)

我的问题是我收到错误:

  

找不到类型'CGPoint'的初始值设定项,它接受类型为'(x:UInt32,y:UInt32)'的参数列表

任何提示如何解决这个问题?谢谢!

3 个答案:

答案 0 :(得分:2)

两件事:

  • 您可能需要将头寸的最大值设置为某个值,例如:屏幕的宽度/高度
  • arc4random返回一个UInt32,而CGPoint的初始化程序使用CGFloats。您需要将UInt32转换为CGFloats

这看起来像是:

var rand_x = CGFloat(arc4random_uniform(maxXValue)) // maxXValue is a variable with your maximum possible x value
var rand_y = CGFloat(arc4random_uniform(maxYValue)) // maxYValue is a variable with your maximum possible y value
node!.position = CGPoint(x: rand_x, y: rand_y)

答案 1 :(得分:1)

arc4random()函数返回类型为UInt32,但CGPoint没有初始值设定项x& yUInt32

您可以将rand_xrand_y投射到初始值设定项的兼容类型(例如IntCGFloat),如下所示:

var rand_x = arc4random()
var rand_y = arc4random()
let point = CGPoint(x: Int(rand_x), y: Int(rand_y))

您可以对CGPoint引入UInt32初始值设定项进行扩展:

extension CGPoint {
    init(x: UInt32, y: UInt32) {
        self.x = CGFloat(x)
        self.y = CGFloat(y)
    }
}

请注意,CGPoint是一个结构,其中包含xy类型的CGFloat CGFloat(这就是为什么我在which投射我的which.max初始化)。

答案 2 :(得分:0)

您需要先将rand_xrand_y投放到CGFloat

node!.position = CGPoint(x: CGFloat(rand_x), y: CGFloat(rand_y))

另请查看arc4random_uniform