Swift(iOS8)SpriteKit在移动到下一个之前等待动画在一个正在运行的循环中完成?

时间:2014-09-26 08:50:14

标签: swift ios8

当在swift中的循环内部时,如何确保动画在下一次迭代之前首先完成并因此发生新的动画调用?

道歉,我可能会在这里提出一个类似于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个旋转动作(不太确定sprite kit是如何处理的)看起来同一个精灵上有3个动画调用,同时?)。不是我之后的行为..

我正在寻找的是一种让每个动画调用在移动到下一个之前完整执行的方法。因此,希望这将使精灵移动到每个点,执行旋转然后继续下一个动画。显然,这个例子的重要部分是必须在循环中发生。

我在这里有很多需要学习的地方,所以任何帮助都会受到赞赏。

提前谢谢,马特

1 个答案:

答案 0 :(得分:0)

提示:不是直接运行sequence操作,而是将其存储在数组中。 for循环结束后,在这种情况下,您的数组应包含3个操作。您现在可以创建另一个序列操作来运行这3个操作。