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

Random Number Generator for X,Y Coordinates

我今天在编写代码时偶然发现了我的随机数生成器的问题。我正在尝试制作一个与水果忍者中的生成器非常相似的生成器,我也在 swift 中写作。这是我的代码片段:

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

我的问题是出现错误:

Cannot find an initializer for type 'CGPoint' that accepts an argument list of type '(x: UInt32, y: UInt32)'

有什么解决办法吗?谢谢!

您需要先将 rand_xrand_y 转换为 CGFloats。

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

也看看arc4random_uniform

两件事:

  • 您可能需要将头寸的最大值限制在某个值,例如屏幕width/height
  • arc4random returns 一个 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)

arc4random() 函数 return 类型是 UInt32,但是 CGPoint 没有初始化器,其中 xyUInt32.

您可以将 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在我的初始化程序中)。