如何在while循环spritekit内部生成之前等待
Posted
技术标签:
【中文标题】如何在while循环spritekit内部生成之前等待【英文标题】:how to wait before spawning inside while loop spritekit 【发布时间】:2021-08-06 23:21:25 【问题描述】:代码的目标是生成卡片,直到卡片的总和达到 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()
等待持续时间不起作用。任何帮助表示赞赏。
【问题讨论】:
“等待持续时间不起作用” 是的,但它对您的代码没有任何影响。它不会导致您的代码神奇地停在中间。dealCardValues.sum()
在该循环中如何变化?如果我们知道这个循环将运行多少次,只需使用DispatchQueue
,并为循环的每个索引增加延迟。如果这个值是未知的,你可以在内部递归一个函数并延迟。
或者你可以使用SKAction.sequence([SKAction.wait(forDuration: 1), SKAction.run ... ])
?不太确定您的需求。
@matt,好的 ..,那么我该怎么做才能达到我想要的结果?
@George,spawnCard 中的函数就是这样做的,因为我简化了它,所以代码没有完全显示它
【参考方案1】:
您可以为此使用计时器。计时器每 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()
【讨论】:
以上是关于如何在while循环spritekit内部生成之前等待的主要内容,如果未能解决你的问题,请参考以下文章
shell循环有for while until 这三个都是内部命令
在MATLAB中如何实现一段while循环后,判断是不是符合条件,若不符合重新回到while?