Swift - Init方法和随机化不起作用

时间:2016-09-06 18:42:34

标签: swift sprite-kit

当我运行此代码时,我没有收到任何错误,但唯一的问题是我尝试了一种“init”方法来随机化对象纹理。我使用了init方法,因为在我遇到实例变量randomizer变量的问题之前,不能在类型'Gamescene'上使用。但是现在,随机数发生器不再随机化了。

class GameScene: SKScene, SKPhysicsContactDelegate {


struct randomize {

    var randomizer: Int

    init() {

        randomizer = Int(arc4random_uniform(3))

    }
}

var r = randomize()

var object = SKSpriteNode()

override func update(currentTime: CFTimeInterval) {


    if object.position.y < 25 {


        object.texture = SKTexture(imageNamed: "object\(r.randomizer)")

    }

2 个答案:

答案 0 :(得分:1)

启动此结构时会生成“randomizer”变量,但在尝试访问它时不会再次随机化。为了在每次访问时获得不同的值,您需要为“randomizer”创建一个getter并在那里生成一个值。

struct randomize {
    var randomizer: Int {
       return Int(arc4random_uniform(3))
    }

    init() {
    }
}

答案 1 :(得分:0)

正如@ knight0fdragon评论的那样,你真的不应该使用这个结构,应该使用一个函数。

你的结构:

struct randomize {
    var randomizer: Int
    init() {
        randomizer = Int(arc4random_uniform(3))
    }
}

应该只是功能:

func randomizer() -> Int{
    return Int(arc4random_uniform(3))
}

您只需致电:

randomizer() // new value

如果您想使用该结构,则应该是:

struct randomize {
    var randomizer: Int!
    init() {
        randomizeR()
    }
    mutating func randomizeR(){
        randomizer = Int(arc4random_uniform(3))
    }
}

你这样使用的地方:

var r = randomize()
print(r.randomizer) // initial value
print(r.randomizer) // initial value
r.randomizeR()
print(r.randomizer) // new value

甚至更简单:

struct randomize {
    var randomizer: Int {
        return Int(arc4random_uniform(3))
    }
}

你这样使用的地方:

var r = randomize()
print(r.randomizer) // initial value
print(r.randomizer) // new value
print(r.randomizer) // new value