Я делаю небольшую игру: у меня есть матрица для SKSpriteNode и чисел, когда игра заканчивается. Я пытаюсь сделать анимацию, я просматриваю матрицу, меняя только спрайт один за другим, следуя порядку цифры. Посмотрите Board (квадраты находятся в Sknode и числа в других Sknode)Как анимировать матрицу, меняющую спрайты один за другим?
Идея это изменить спрайт другого цвета и подождать 2 секунды после изменения на следующий, но я не могу это сделать. Я не знаю, как сменить спрайт один за другим. Я делаю эту функцию «RecoverMatrix()», это изменение спрайтов, но все сразу, это как бы не ожидание, он меняет все спрайты и дождитесь 2 секунд.
func RecoverMatrix() {
var cont = 1
TileLayer.removeAllChildren()
numLayer.removeAllChildren()
let imageEnd = SKAction.setTexture(SKTexture(imageNamed: "rectangle-play"))
let waiting = SKAction.waitForDuration(2)
var scene: [SKAction] = []
var tiles: [SKSpriteNode] = []
while cont <= 16 {
for var column = 0; column < 4; column++ {
for var row = 0; row < 4; row++ {
if matrix[column][row].number == cont {
let label = SKLabelNode()
label.text = "\(matrix[column][row])"
label.fontSize = TileHeight - 10
label.position = pointForBoard(column, row: row)
label.fontColor = UIColor.whiteColor()
let tile = SKSpriteNode()
tile.size = CGSize(width: TileWidth - 3, height: TileHeight - 3)
tile.position = pointForBoard(column, row: row, _a: 0)
TileLayer.addChild(tile)
numLayer.addChild(label)
tiles.append(tile)
scene.append(SKAction.sequence([imageEnd, waiting]))
tile.runAction(imageEnd)
runAction(waiting)
didEvaluateActions()
}
}
}
cont++
}
for tile in tiles {
tile.runAction(SKAction.sequence(scene))
self.runAction(SKAction.waitForDuration(1))
}
}
Итак, мне нужна помощь, я не нахожу способ сделать эту анимацию. Я очень ценю помощь. Благодаря!
Это, безусловно, выполнимо, если я вас хорошо понимаю ... Не пристально посмотрел ваш код, но я предполагаю, что у вас уже есть массив спрайтов с сохраненным порядком. То, что вам нужно сделать, - это перебрать все из них (например, внутри цикла for) и запустить последовательность действий для каждой плитки (спрайт), которую вы хотите изменить. Последовательность действий должна состоять в основном из двух частей. Первая часть будет 'SKAction.waitForDuration()', и это должно измениться для каждого фрагмента. Вторая часть - это фактическое изменение цвета или все, что вы планируете. Итак, просто рассчитайте действие ожидания соответствующим образом, и вы получите эффект, который вы хотите. – Whirlwind
Так что вам просто нужно увеличить продолжительность ожидания для каждого узла. Кроме того, вы должны, вероятно, запустить эту последовательность на каждом узле отдельно, а не на сцене. И что такое 'didEvaluateActions()' вызов внутри вашего цикла while? Это выглядит теневым :) Вы не должны называть этот метод [напрямую] (https://developer.apple.com/library/tvos/documentation/SpriteKit/Reference/SKScene_Ref/index.html#//apple_ref/occ/instm/SKScene/didEvaluateActions) ... – Whirlwind