Я создаю карточную игру, и у меня возникают проблемы с запуском SKActions в последовательности для нескольких объектов SK (узлов, текстур, меток и т. д.). Любая помощь приветствуется! В приведенном ниже примере я пытаюсь создать движение «сделки». Когда сдается 1 карта, проходит некоторое время, затем сдается следующая карта. Я попытался использовать это, но с 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 секунды. Таким образом, несмотря на то, что все они работают одновременно, время ожидания увеличивается для каждой карты. Однако не уверен, что это лучший способ решить проблему, и надеялся, что есть более элегантное решение.
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)
}
}
}