gpt4 book ai didi

swift - 拳击计数/延迟/定时器

转载 作者:可可西里 更新时间:2023-11-01 02:00:44 24 4
gpt4 key购买 nike

我创建了一个拳击模拟,现在要回去添加动画。现在,我正在添加一个“Ref's Countup”来增加悬念。我尝试了很多事情,但没有一个得到我想要的。我尝试了:

Thread.sleep(forTimeInterval: 1)
knockdownNumber.text = "\(knockdownNumberInt)"

sleep(1)
knockdownNumber.text = "\(knockdownNumberInt)"

那些暂停了用户界面。所以他们确实等待了适当的时间,但没有更改我的文本。还有一些只计算一次(即 1、3 或 1、8)。

DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
self.knockdownNumber.text = "\(self.knockdownNumberInt)"
}

let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false) { (timer) in
self.knockdownNumber.text = "\(self.knockdownNumberInt)"
}

 delay(1) {
self.knockdownNumber.text = "\(self.knockdownNumberInt)"
}

延迟函数为

 func delay(_ delay:Double, closure:@escaping ()->()) {
DispatchQueue.main.asyncAfter(
deadline: DispatchTime.now() + Double(Int64(delay * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC), execute: closure)
}

我调用该函数(所有这些都在其中)的方式是在他被击倒之后。这段代码看起来像这样。

knockdownNumber.text = "1"
knockdownNumberInt = 1
downSec()
knockdownNumberInt = knockdownNumberInt + 1
downSec()
knockdownNumberInt = knockdownNumberInt + 1
downSec()
if fighter2.endurance < 400 {
knockdownNumberInt = knockdownNumberInt + 1
downSec()
}
if fighter2.endurance < 300 {
knockdownNumberInt = knockdownNumberInt + 1
downSec()
}
if fighter2.endurance < 200 {
knockdownNumberInt = knockdownNumberInt + 1
downSec()
}
if fighter2.endurance < 100 {
knockdownNumberInt = knockdownNumberInt + 1
downSec()
}
if fighter2.endurance < 0 {
knockdownNumberInt = knockdownNumberInt + 1
downSec()
}
if fighter2.endurance < -100 {
knockdownNumberInt = knockdownNumberInt + 1
downSec()
}

我真的很难过。

最佳答案

使用这种方法你就快完成了:

let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false) { (timer) in
self.knockdownNumber.text = "\(self.knockdownNumberInt)"
}

您需要做的就是将repeats 设置为true,计时器将永远重复。

现在我们需要决定何时停止计时器。我们甚至应该在启动计时器之前就决定这一点,而不是像您所做的那样 - 在开始新时间时递减 knockdownNumberInt。这是行不通的,因为您放入计时器闭包中的内容是异步的。

因此我们决定要数到的数字:

knockdownNumber.text = "1"
knockdownNumberInt = 3
if fighter2.endurance < 400 {
knockdownNumberInt += 1 // use the "+=" to make it cleaner!
}
if fighter2.endurance < 300 {
knockdownNumberInt += 1
}
if fighter2.endurance < 200 {
knockdownNumberInt += 1
}
if fighter2.endurance < 100 {
knockdownNumberInt += 1
}
if fighter2.endurance < 0 {
knockdownNumberInt += 1
}
if fighter2.endurance < -100 {
knockdownNumberInt += 1
}

在类中声明一个名为 currentCountDown 的属性:

var currentCountDown = 1

然后你可以像这样创建你的计时器:

let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { [weak self] (timer) in
guard let `self` = self else { // I added this to prevent a retain cycle.
timer.invalidate()
return
}
self.currentCountDown += 1
self.knockdownNumber.text = "\(self.currentCountDown)"
if self.currentCountDown == self.knockdownNumberInt {
timer.invalidate()
}
}

关于swift - 拳击计数/延迟/定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46537125/

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