2017-03-15 16 views
1

我試圖更新一個精靈裏面的「覆蓋func didMove(查看: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))) 
} 
+0

@Farini雖然我同意的問題可以使用一些編輯,randomTime不是一個常量。 OP已經在類聲明(假設)內正確地設置了它,並使用var vs let。 –

回答

1

對於初學者,您的操作已在運行,更改randomTime的值不會影響已在運行的操作。也移動(查看:)只會在頁面初始加載時被調用,以便內部的操作永遠不會再運行。

什麼我顯示你是運行此的可怕的方式,但它會告訴你,randomTime將改變,並在新的時間運行的操作

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