Когда внутри цикла в swift, как я могу гарантировать, что анимация завершается первой до следующей итерации, и поэтому возникает новый вызов анимации?Swift (iOS8) SpriteKit ждет анимацию для завершения внутри цикла, прежде чем перейти к следующему?
Извините, что я могу покрывать старую землю здесь вопросом, похожим на another, который использовал Objective-C, а не быстро. Я просто хотел сделать свой собственный запрос, поскольку я довольно много начал в Swift и не нашел много четкой помощи по этой проблеме.
Ниже приведен простой код, помогающий продемонстрировать мой вопрос. Функция moveAlong
просто принимает массив CGPoints который я трудно закодированный как показано ниже:
let point1 = CGPointMake(100, 100)
let point2 = CGPointMake(100, 400)
let point3 = CGPointMake(400, 400)
array.append(point1)
array.append(point2)
array.append(point3)
moveAlong(array) //calls the function passing in our points
func moveAlong(thesePoints:[CGPoint]) {
var length = thesePoints.count //capture the length of array
//for every point in the array
for i in 0..<length {
//plug point from the array into our move action here
let move = SKAction.moveTo(thesePoints[i], duration: 1)
let spinAction = SKAction.rotateByAngle(CGFloat(2*M_PI), duration:1)
//both above actions are sequenced together
let sequence = SKAction.sequence([move,spinAction])
//run the sequence on sprite
sprite.runAction(sequence)
}
}
текущее поведение этого кода является своего рода странный гибрид всех трех действий, движущихся спрайт в конечное положение в point3
, за которым следуют все 3 действия спина (не слишком уверенно, как спрайт-набор справляется с тем, что, как представляется, составляет 3 вызова анимации одного и того же спрайта одновременно). Не совсем то, что я после.
То, что я ищу, - это способ, чтобы каждый анимационный вызов выполнялся целиком, прежде чем переходить на следующий. Таким образом, мы надеемся, что это заставит спрайт двигаться в каждую точку, выполнить вращение, а затем продолжить следующую анимацию. Очевидно, что важная часть этого примера заключается в том, что это должно происходить в цикле.
У меня явно есть чему поучиться здесь, поэтому любая помощь будет оценена по достоинству.
Заранее спасибо, Matt
Хорошо спасибо, я понимаю, что вы говорите здесь, который исправляет этот маленький случай, как вы упомянули. Но каков был бы ваш ответ, если бы цикл должен был применять эти действия к другому спрайту через каждую итерацию? Таким образом, вместо того, чтобы применять действия к одному спрайту, мы каждый раз обращались бы к новому, используя что-то вроде 'spritesArray [i] .runAction (sequence)'. – noobycode