Random value in Swift

2019-07-17 06:06发布

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

3条回答
在下西门庆
2楼-- · 2019-07-17 06:22

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)
查看更多
Ridiculous、
3楼-- · 2019-07-17 06:27
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.

查看更多
混吃等死
4楼-- · 2019-07-17 06:43

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)
查看更多
登录 后发表回答