精灵套件随机值永远不会两次

时间:2015-03-16 15:32:58

标签: ios swift random sprite-kit

我希望获得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()]
}

1 个答案:

答案 0 :(得分:0)

您的财产

var previousPosition : Int?

本地addWall()方法,因此初始化为nil 每次调用该方法。如果你把它作为一个属性 而不是周围的类:

class YourClass {

    var previousPosition : Int?

    func addWall() { ... }

    // ...
}

然后仅在类的实例时将其初始化为nil 已创建。