首页 > 解决方案 > 如何在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()
                    

                }

等待持续时间不起作用。任何帮助表示赞赏。

标签: swiftsprite-kitnodeswait

解决方案


您可以为此使用计时器。计时器每 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()
    }
    
  }

推荐阅读