我试图在每次更改时随机更新“override func didMove(to view: SKView) {”中的 Sprite ,但它始终保持在恒定时间。
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:) 也只会在页面最初加载时被调用,因此里面的 Action 将永远不会再次运行。
我向您展示的是一种糟糕的运行方式,但它会向您展示 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)))
}
}
关于swift - 如何更新 var in did move to view,在 did move to view 之外快速查看,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42817187/