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?

localaddWall()方法,因此初始化为nil 每次调用该方法。如果你把它设为 属性 周围 class 改为:

class YourClass {

    var previousPosition : Int?

    func addWall() { ... }

    // ...
}

然后它被初始化为nil只有当class的一个实例 已创建。