如何在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内部生成之前等待的主要内容,如果未能解决你的问题,请参考以下文章

如何在while内部正确循环

Unity - 如何在无限循环的情况下停止播放模式?

shell循环有for while until 这三个都是内部命令

在MATLAB中如何实现一段while循环后,判断是不是符合条件,若不符合重新回到while?

如何在单页中使用 php 从 while 循环中生成多个读取更多按钮?

java:while循环-在进入花括号之间的语句之前使用分号语句?