2014-09-26 10 views
2

Когда внутри цикла в 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

ответ

0

Подсказка: вместо того, чтобы ваше sequence действие непосредственно, храните его в массиве. После окончания цикла for ваш массив должен содержать 3 действия в этом случае. Теперь вы можете создать другое действие последовательности, чтобы выполнить эти 3 действия.

+1

Хорошо спасибо, я понимаю, что вы говорите здесь, который исправляет этот маленький случай, как вы упомянули. Но каков был бы ваш ответ, если бы цикл должен был применять эти действия к другому спрайту через каждую итерацию? Таким образом, вместо того, чтобы применять действия к одному спрайту, мы каждый раз обращались бы к новому, используя что-то вроде 'spritesArray [i] .runAction (sequence)'. – noobycode