我今天正在编写代码,我偶然发现了随机数生成器的问题。我正在努力制造一个像水果忍者那样的发电机,我也在迅速写作。以下是我的代码片段:
var rand_x = arc4random()
var rand_y = arc4random()
node!.position = CGPoint(x: rand_x, y: rand_y)
我的问题是我收到错误:
找不到类型'CGPoint'的初始值设定项,它接受类型为'(x:UInt32,y:UInt32)'的参数列表
任何提示如何解决这个问题?谢谢!
答案 0 :(得分:2)
两件事:
这看起来像是:
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
& y
为UInt32
。
您可以将rand_x
和rand_y
投射到初始值设定项的兼容类型(例如Int
或CGFloat
),如下所示:
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
是一个结构,其中包含x
和y
类型的CGFloat
CGFloat
(这就是为什么我在which
投射我的which.max
初始化)。
答案 2 :(得分:0)
您需要先将rand_x
和rand_y
投放到CGFloat
。
node!.position = CGPoint(x: CGFloat(rand_x), y: CGFloat(rand_y))
另请查看arc4random_uniform