【问题标题】:Add a delay, when iterating over an array, for every single element在遍历数组时为每个元素添加延迟
【发布时间】:2017-09-05 23:09:01
【问题描述】:

尝试使用SKLabelNode 在标签上逐一显示下面数组中的元素。我认为问题在于它对数组的迭代速度比序列运行过程的速度要快,因此导致崩溃,因为self.addChild() 试图在“准备”仍在显示时再次显示“设置”。

我的问题是,如何减慢迭代速度,以便在显示“Set”之前“Ready”可以出现和消失?

let readySetGo = ["Ready", "Set", "GO!"]
for i in readySetGo {
    newLevelLabel.text = i
    newLevelLabel.fontSize = 60

    let wait = SKAction.wait(forDuration: 2)
    let remove = SKAction.removeFromParent()
    let sequence = SKAction.sequence([wait, remove])

    newLevelLabel.run(sequence)

    self.addChild(newLevelLabel)
}

【问题讨论】:

  • newLevelLabel 是 UILabel 吗?还向父视图添加三次 newLevelLabel 似乎没有意义
  • 这是游戏倒计时吗?这段代码在你的程序中的什么位置 - 在 sceneDidLoad、update() 等中?
  • 这段代码在...override func didMove(to view: SKView),它是一个SKLabelNode...

标签: arrays swift for-loop sprite-kit delay


【解决方案1】:

它立即进入 GO 的原因是因为你没有以相同的顺序链接所有操作,所以你所有的阶段都在同时运行:

试试这个,我现在还没有编译器:

let readySetGo = ["Ready", "Set", "GO!"]

newLevelLabel.fontSize = 60

let seq: [SKAction]=[]
let waitTime:TimeIneterval = 2

for i in readySetGo {

    let block = SKAction.run{
        self.newLevelLabel.text = i
    }

    let wait = SKAction.wait(forDuration: waitTime)

    seq.append(wait)
    seq.append(block)

}

let wait = SKAction.wait(forDuration: waitTime)
let remove = SKAction.removeFromParent()
seq.append(wait)
seq.append(remove)
let sequence = SKAction.sequence(seq)

newLevelLabel.run(sequence)

self.addChild(newLevelLabel)

【讨论】:

  • 你正在增加你的等待时间,所以在准备和设置之间是 2 秒,在设置和开始之间是 3 秒。我想你想拿出waitTime += 1
  • @Knight0fDragon 是的,这是一个解决问题的例子,我希望 stinkyProgram 知道如何管理他的等待时间
  • 非常感谢你们,我才编程 3 个月,所以这对我来说是新的,谢谢..
  • @stinkyProgram 欢迎您。如果解决方法正确,请采纳
  • @SimonePistecchia seq 应该是 var 而不是 let,而你拼错了 TimeInterval
猜你喜欢
  • 2022-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多