运行 序列中多个 SKNode 上的 SKAction

Running SKActions on Multiple SKNodes in Sequence

我正在创建纸牌游戏,但在跨多个 SK 对象(节点、纹理、标签等)的序列中遇到 SKActions 运行 时遇到问题。任何帮助将非常感激!在下面的示例中,我试图创建一个 "dealing" 动作。在发一张牌的地方,一段时间过去了,然后发了下一张牌。我尝试使用 this,但是对于 52 张卡片,这并不是最简单的方法。

首先,我尝试为每张卡片创建一个 SKActions 数组。但是,根据我对文档的理解,我不相信我可以 运行 使用一个命令执行以下操作。每个动作都需要 运行 针对特定的 Sprite 对象,而不是 运行 跨越多个 Sprite 对象的整个动作序列。

let dealAction = SKAction[]()
for card in deck {
    let move = SKAction.... 
    dealAction.append(move)
}
run.SKAction.sequence(dealAction) // This will not work. 

然后我尝试了这个,希望循环能够在移动到下一张卡片之前完成每张卡片的代码块。但是,所有动作 运行 同时进行。现在,我有点迷茫,我不知道如何有效地实现这一点。我唯一能想到的就是创建一个 "timingIndex",其中每张卡片的等待时间增加 0.2 秒。因此,即使它们同时 运行ning,每张卡的等待时间也会增加。不确定这是否是解决问题的最佳方法,并希望有一个更优雅的解决方案。

for card in deck {
    let move = SKAction.... 
    let wait = SKAction.wait(forDuration: 1)
    card.run(SKAction.sequence[move, wait])
}

// Possible Solution
let timingIndex = 0.2
for card in deck {
    let move = SKAction.... 
    let wait = SKAction.wait(forDuration: timingIndex)
    card.run(SKAction.sequence[move, wait])
    timingIndex += 0.2
}

import SpriteKit
import UIKit

let screenH = 100
let screenW = 50

class Player {
    var handLocation: CGPoint
    var pile = [Card]()

    init() {
        handLocation = CGPoint(x: 100, y: 583)
    }
}

class Card: SKSpriteNode {

}

struct Game {
    var player1 = Player()
    var player2 = Player()
    var deck = [Card]()

    func dealDeck() {
        for card in deck {
            player1.pile.append(card) // This would theoretically loop through both players
            card.position = CGPoint(x: screenW / 2, y: screenH / 2)
            let move = SKAction.move(to: player1.handLocation, duration: 1)
            card.run(move)
        }
    }

}

这成功了!担心这个整体的使用,如果还有更好的解决方案,但暂时,这个有效。

// Possible Solution
let timingIndex = 0.2
for card in deck {
    let move = SKAction.... 
    let wait = SKAction.wait(forDuration: timingIndex)
    card.run(SKAction.sequence[move, wait])
    timingIndex += 0.2
}