swift - 如何在while循环spritekit内部生成之前等待
问题描述
代码的目标是生成卡片,直到卡片的总和达到 17。在这种情况下,代码可以正常工作,但我希望它在生成另一张卡片之前等待 1 秒。该代码当前一次生成所有卡片(并停止直到达到 17),这是我不想要的。这是一个简化版本,供参考,在 SpriteKit 的 touchesBegan 中:
else if standLabel.contains(touch.location(in: self)) {
let waitForCard = SKAction.wait(forDuration: 1)
while dealerCardValues.sum() <= 16 {
self.run(waitForCard)
spawnCard()
}
等待持续时间不起作用。任何帮助表示赞赏。
解决方案
您可以为此使用计时器。计时器每 1 秒调用一次,它运行spawnCard()
函数并将计数器变量加 1。一旦 counter
达到 17,我们就将其无效以停止它再次触发。
所以替换这段代码:
let waitForCard = SKAction.wait(forDuration: 1)
while dealerCardValues.sum() <= 16 {
self.run(waitForCard)
spawnCard()
有了这个:
var counter = 1
Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { [self] timer in
counter += 1
spawnCard()
if counter == 17 {
timer.invalidate()
}
}
推荐阅读
- c - 在函数中初始化的结构丢失值(尽管它是一个数组)
- python - Python pandas 数据帧未能在运行模式下成功执行 to_csv() 而在调试模式下成功执行
- firebase - Flutter firebase 软件包版本在消息传递、核心和分析之间发生冲突
- vue.js - Vue Composition API: Defining emits
- node.js - 有没有办法将 Google Colab ipynb 文件与 Node js 后端连接起来?
- csv - 空手道 - 在表单数据正文中上传 csv 文件
- javascript - 一个回车字符串的长度可以为零吗?
- javascript - 按下回车输入后,Vuejs在下一个按钮中生成点击事件
- c# - 如何统一询问相机的运行时权限?
- git - 阻止 Gitconfig 文件被本地 .git/config 覆盖