gpt4 book ai didi

ios - swift : How to update a label every second (or shorter) with a timer?

转载 作者:行者123 更新时间:2023-12-01 17:47:26 25 4
gpt4 key购买 nike

我在 Xcode 中为游戏 (SpriteKit) 创建了一个简单的计时器:

类中初始化变量timer、seconds和score。

func scoreTimer() {
timer = Timer.scheduledTimer(timeInterval: 0.05, target: self, selector: #selector(countUp), userInfo: nil, repeats: true)
}

@objc func countUp() {
seconds += 0.05
seconds = (seconds * 100).rounded() / 100
score = score + 0.015
updateScore()
}

func updateScore() {
scoreLabel.text = "\(score)"
}

计时器在 GameScene 加载后在 didMove() 中启动。

我尝试每 0.5 秒调用一次 countUp()。在此函数中,变量 seconds 增加并四舍五入加上 score 变量增加。从那里我想调用 updateScore 函数来更新 scoreLabel.text - 但这不起作用。函数被调用,但 scoreLabel 没有更新,尽管当我尝试打印 score 变量时,它显示它不断增加。

我怎样才能做到这一点,这里有什么问题?

最佳答案

除非您正在使用 SpriteKit 之外的技术,否则 SpriteKit 应避免使用计时器。原因是因为 SpriteKit 有自己的时间管理,一个定时器可能不会与之重合。例如,在您的情况下,计时器会更新分数。如果你暂停游戏怎么办?除非您记得停止,否则您的计时器仍会增加分数。

相反,依靠操作来完成您需要的事情以下是您如何做您正在寻找的事情。

let wait = SKAction.wait(forDuration: 0.5)
let update = SKAction.run(
{
seconds += 0.05
seconds = (seconds * 100).rounded() / 100
score = score + 0.015
updateScore()
}
)
let seq = SKAction.sequence([wait,update])
let repeat = SKAction.repeatForever(seq)
run(repeat)

@RonMyschuk 提到了一个我遗漏的想法,所以我也将其添加到我的回答中。

如果您需要创建可以单独暂停或在组中暂停的计时器,则添加额外的 SKNode 并将计时器操作附加到节点而不是场景。然后当你需要暂停定时器时,你可以暂停节点。这将允许您的场景更新在您的计时器暂停时继续。

关于ios - swift : How to update a label every second (or shorter) with a timer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45620511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com