如何在swift中did move to view之外的did move to view中更新var

如何在swift中did move to view之外的did move to view中更新var,swift,swift3,sprite-kit,Swift,Swift3,Sprite Kit,我试图在“override func didMove(to view:SKView){”中的一个精灵每次更改时都随机更新它,但它始终保持不变 var randomTime = 1.9 let spritestater = SKSpriteNode(imageNamed: "spritea1.png") let sprite1 = SKAction.setTexture(SKTexture(imageNamed:"spritea1.png")) let sprite2 = SKAction.set

我试图在“override func didMove(to view:SKView){”中的一个精灵每次更改时都随机更新它,但它始终保持不变

var randomTime = 1.9
let spritestater = SKSpriteNode(imageNamed: "spritea1.png")
let sprite1 = SKAction.setTexture(SKTexture(imageNamed:"spritea1.png"))
let sprite2 = SKAction.setTexture(SKTexture(imageNamed: "sprite1b.png"))

 override func didMove(to view: SKView) {
    spritestater.scale(to: self.frame.size)
    spritestater.anchorPoint = CGPoint(x: 1, y: 1)
    spritestater.zPosition = 1
    spritestater.position = CGPoint(x: self.frame.maxX, y: self.frame.maxY)
    addChild(spritestater)

    let anamatesprite = SKAction.repeatForever(SKAction.sequence(
        [sprite1,
        SKAction.wait(forDuration: TimeInterval(randomTime)),
        sprite2,
        SKAction.wait(forDuration: 0.3),
        ]))
    spritestater.run(anamatesprite)
 }

 override func update(_ currentTime: TimeInterval) {
    randomTime = Double(arc4random_uniform(UInt32(4.5)))
 }

首先,您的操作已在运行,更改randomTime的值不会影响已在运行的操作。此外,didMove(to view:)仅在最初加载页面时才会被调用,因此其中的操作将永远不会再次运行

我向您展示的是一种可怕的运行方式,但它将向您展示随机时间将发生变化,并在新时间运行操作

override func didMove(to view: SKView) {
    spritestater.scale(to: self.frame.size)
    spritestater.anchorPoint = CGPoint(x: 1, y: 1)
    spritestater.zPosition = 1
    spritestater.position = CGPoint(x: self.frame.maxX, y: self.frame.maxY)
    addChild(spritestater)

    runActionOnSprite()
}

func runActionOnSprite() {
    let anamatesprite = SKAction.repeatForever(SKAction.sequence(
    [sprite1,
    SKAction.wait(forDuration: TimeInterval(randomTime)),
    sprite2,
    SKAction.wait(forDuration: 0.3),
    ]))
    spritestater.run(anamatesprite)
}

override func update(_ currentTime: TimeInterval) {
    if !spritestater.hasActions()
        randomTime = Double(arc4random_uniform(UInt32(4.5)))
    }
}

@Farini虽然我同意这个问题需要一些编辑,但randomTime不是一个常数。OP在类声明(假设)中正确地设置了它,并使用var vs let。