【问题标题】:How can I add objects to a scene from an array one at a time?如何一次将对象从数组中添加到场景中?
【发布时间】:2025-11-29 06:40:01
【问题描述】:

我有一个包含 30 个 SKSpriteNode 的数组。我想一次将每个节点添加到场景中,延迟时间很小。这是我到目前为止所拥有的,但它会立即添加所有精灵。

   for var i = 0; i < 31; i++ {

        var boardPiece = SKShapeNode()
        boardPiece = addBigRedCircle()
        redPiecesArray.addObject(boardPiece)
        self.addChild(redPiecesArray.objectAtIndex(i) as SKNode)

        }

我怎样才能一次有效地从数组 1 中添加这些对象? (如果你知道如何用 Obj-C 来做这件事,那会有所帮助,因为我可能会弄清楚如何用 Swift 说同样的话)

【问题讨论】:

    标签: ios objective-c arrays xcode swift


    【解决方案1】:

    使用 GCD 怎么样?这是 Swift 中的东西吗?

    for var i = 0; i < 31; i++ {
      dispatch_after((Int64)(i * delayInSeconds * NSEC_PER_SEC), dispatch_get_main_queue(), {     
        var boardPiece = SKShapeNode()
        boardPiece = addBigRedCircle()
        redPiecesArray.addObject(boardPiece)
        self.addChild(redPiecesArray.objectAtIndex(i) as SKNode)
      })
    }
    

    (dispatch_after的结构基于https://*.com/a/24034838/2708650修改)

    【讨论】:

    • 我对 Swift 和 Obj-C 还是很陌生。我查了一下,使用 Swift 的 GCD 绝对是可行的。不幸的是,我只是不懂 GCD。fruitstandsoftware.com/blog/2014/06/09/…
    • 你试过运行我在那里写的代码吗?看起来这些函数应该仍然存在于 Swift 中的 API 中。我不是用 Swift 开发的,所以我没有可以测试它的沙箱。
    • 是的,我尝试粘贴您的代码。但是 Swift 似乎没有 int64_t 但它确实有 Int64。因此,当我尝试 Int64 时,我收到错误“无法使用类型为 '(dispatch_time_t, dispatch_queue_t!, () -> () -> $T15)'的参数列表调用 '*'