Random value in Swift

2019-07-17 05:53发布

问题:

I'm trying to have a value who is between 0 and the size of my screen. So i did it like this :

let sizeX = Int(CGRectGetMaxX(self.frame))
let sizeY = Int(CGRectGetMaxY(self.frame))
var randomX = CGFloat(arc4random()) % sizeX
var randomY = CGFloat(arc4random()) % sizeY
self.touchButton.position = CGPointMake(randomX, randomY)

I have this error : could not find an overload for '%' that accepts the supplied arguments

I need this to randomize the position of an SkSpriteNode, maybe is there a better solution ?

Thank you

回答1:

Convert the value that arc4random() returns to an Int and then convert the whole expression to a CGFloat:

var randomX = CGFloat(Int(arc4random()) % sizeX)
var randomY = CGFloat(Int(arc4random()) % sizeY)
self.touchButton.position = CGPointMake(randomX, randomY)


回答2:

let sizeX = Int(CGRectGetMaxX(self.frame))
let tempRandX = Int(arc4random_uniform(sizeX))
var randomX = CGFloat(temptRandomX)

let sizeY = Int(CGRectGetMaxY(self.frame))
let tempRandY = Int(arc4random_uniform(sizeY))
var randomY = CGFloat(temptRandomY)

self.touchButton.position = CGPointMake(randomX, randomY)

Use this instead. Also tested it.



回答3:

this should do it

let sizeX = UInt32(CGRectGetMaxX(self.frame))
let randomX = CGFloat(arc4random_uniform(sizeX))

let sizeY = UInt32(CGRectGetMaxY(self.frame))
let randomY = CGFloat(arc4random_uniform(sizeY))

self.touchButton.position = CGPointMake(randomX, randomY)