私はボクシングのシミュレーションを作成し、今はアニメーションを追加するために戻っています。さて、私はサスペンスを追加するために "Refのカウントアップ"を追加しています。私は数多くのことを試しましたが、私が望むものは得られませんでした。これらは、UIを一時停止しボクシングカウントアップ/遅延/タイマー
Thread.sleep(forTimeInterval: 1)
knockdownNumber.text = "\(knockdownNumberInt)"
と
sleep(1)
knockdownNumber.text = "\(knockdownNumberInt)"
:私が試してみました。彼らは適切な時間を待っていましたが、テキストを変更しませんでした。 これらはすべて1回だけカウントされます(つまり、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)"
}
と
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)
}
として遅延機能付き
delay(1) {
self.knockdownNumber.text = "\(self.knockdownNumberInt)"
}
私は(これらがすべてである)関数を呼び出す方法は、後の彼はノックダウンを取得します。このコードは次のようになります。
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()
}
私は本当に困惑しています。
この問題の1つは、カウントが完了するまでコードを一時停止しないことです。それを行う方法はありますか? – Peter
@Peterそれはすべきです。私は 'timer.invalidate'を呼び出しました – Sweeper
もう一つ問題があります。スキップカウントボタンを押すと、別の男がノックダウンされると、カウントは永遠に進みます。スキップボタンからカウントをキャンセルする方法はありますか?ありがとう、Peter – Peter