Sprite Kit 随机值从不重复
Sprite Kit Random Value never twice
我想获得 5 个定义点之间的随机值,而不是两次获得相同的结果。
这里很好地解释了如何避免出现两次相同的结果:
How to generate a random number in Swift without repeating the previous random number?
但是,在我的代码中它不起作用,因为它仍然是完全随机的,我不明白为什么。
func addWall(){
let positions = [
CGPoint(x: -120,y: -70),
CGPoint(x: -50,y: -70),
CGPoint(x: 10,y: -70),
CGPoint(x: 70,y: -70),
CGPoint(x: 120, y: -70),
]
var previousPosition : Int?
func randomPosition() -> Int {
var randomPosition = Int(arc4random_uniform(UInt32(positions.count)))
while previousPosition == randomPosition {
randomPosition = Int(arc4random_uniform(UInt32(positions.count)))
}
previousPosition = randomPosition
return randomPosition
}
Wall.position = positions[randomPosition()]
}
你的属性
var previousPosition : Int?
是local到addWall()
方法,因此初始化为nil
每次调用该方法。如果你把它设为 属性
周围 class 改为:
class YourClass {
var previousPosition : Int?
func addWall() { ... }
// ...
}
然后它被初始化为nil
只有当class的一个实例
已创建。
我想获得 5 个定义点之间的随机值,而不是两次获得相同的结果。
这里很好地解释了如何避免出现两次相同的结果: How to generate a random number in Swift without repeating the previous random number?
但是,在我的代码中它不起作用,因为它仍然是完全随机的,我不明白为什么。
func addWall(){
let positions = [
CGPoint(x: -120,y: -70),
CGPoint(x: -50,y: -70),
CGPoint(x: 10,y: -70),
CGPoint(x: 70,y: -70),
CGPoint(x: 120, y: -70),
]
var previousPosition : Int?
func randomPosition() -> Int {
var randomPosition = Int(arc4random_uniform(UInt32(positions.count)))
while previousPosition == randomPosition {
randomPosition = Int(arc4random_uniform(UInt32(positions.count)))
}
previousPosition = randomPosition
return randomPosition
}
Wall.position = positions[randomPosition()]
}
你的属性
var previousPosition : Int?
是local到addWall()
方法,因此初始化为nil
每次调用该方法。如果你把它设为 属性
周围 class 改为:
class YourClass {
var previousPosition : Int?
func addWall() { ... }
// ...
}
然后它被初始化为nil
只有当class的一个实例
已创建。