如何在swift中did move to view之外的did move to view中更新var
我试图在“override func didMove(to view:SKView){”中的一个精灵每次更改时都随机更新它,但它始终保持不变如何在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
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。