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

Swift-Init方法和随机化不起作用,swift,sprite-kit,Swift,Sprite Kit,当我运行这段代码时,我没有收到任何错误,但唯一的问题是我尝试了一个“init”方法来随机化对象纹理。我使用了init方法,因为之前我遇到了实例变量randomizer变量的问题,无法在“GameSecene”类型上使用。但是现在,随机化器不再随机化了 class GameScene: SKScene, SKPhysicsContactDelegate { struct randomize { var randomizer: Int init() { ra

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

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)")

    }
类游戏场景:SKScene,skphysiccontactdelegate{
结构随机化{
变量随机化器:Int
init(){
随机发生器=Int(arc4random_均匀(3))
}
}
var r=随机化()
var object=SKSpriteNode()
覆盖函数更新(currentTime:CFTimeInterval){
如果object.position.y<25{
object.texture=SKTexture(图像名为:“object\(r.randomizer)”)
}
初始化此结构时会生成“randomizer”变量,但在尝试访问它时不会再次随机。为了在每次访问它时都有不同的值,需要为“randomizer”创建一个getter并在那里生成一个值

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

    init() {
    }
}

正如@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))
    }
}
struct randomize {
    var randomizer: Int {
        return Int(arc4random_uniform(3))
    }
}
在您这样使用它的地方:

var r = randomize()
print(r.randomizer) // initial value
print(r.randomizer) // initial value
r.randomizeR()
print(r.randomizer) // new value
var r = randomize()
print(r.randomizer) // initial value
print(r.randomizer) // new value
print(r.randomizer) // new value
或者更简单地说:

struct randomize {
    var randomizer: Int!
    init() {
        randomizeR()
    }
    mutating func randomizeR(){
        randomizer = Int(arc4random_uniform(3))
    }
}
struct randomize {
    var randomizer: Int {
        return Int(arc4random_uniform(3))
    }
}
在您这样使用它的地方:

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

如果我用上面的代码替换结构,那么我会得到一个错误,说“实例成员'randomizer'不能用于类型'Gamescene'。我在var object=spriteNode(imageNamed:'object(randomizer)“@eluss上得到这个错误。您可以添加“randomizer”“将var粘贴到您的结构中。您能在不使用getter的情况下使用简单var的地方粘贴准确的代码吗?@Jeffrey您需要执行
“object\(r.randomizer)”
,您错过了
r.
这是一项大量工作,只需执行
func randomizer()->Int{return Int(arc4random\u uniform(3))}
此外,您不想这样做,如果位置<25,您将在每一帧生成一个纹理。这太糟糕了。非常感谢@WMios@Jeffrey,如果这对您有效,请选中我的答案旁边的复选标记。