SKAction等待间隔不一致

时间:2017-09-23 05:56:43

标签: ios swift sprite-kit skspritenode skaction

我有一个创建SpriteNode副本的函数,并以指定的间隔沿矩形路径移动每个副本。我对此间隔有一个问题,即操作以不一致的间隔执行,在操作运行时在精灵节点之间产生奇怪的间隙。

var items = [SKSpriteNode]();
let item = SKSpriteNode(imageNamed: "Spaceship");

func createItem(scene: SKScene) {

    let square = UIBezierPath(rect: CGRect(x: -300, y: -150,  width: 700, height: 300));
    let follow = SKAction.follow(square.cgPath, asOffset: false, orientToPath: false, duration: 5.0);

    for i in 0..<6 {

        if let itemCopy = item.copy() as? SKSpriteNode {
            itemCopy.position = CGPoint(x: -300, y: -150);
            items.append(itemCopy);
            scene.addChild(itemCopy);
            let otherWait = SKAction.wait(forDuration: 1.0, withRange: 2.0);
            let otherSequence = SKAction.sequence([otherWait, SKAction.repeatForever(follow)]);
                itemCopy.run(otherSequence);
            }
        }
}

我的理解是,我不能依赖for loop来计时,这个问题可能是由此造成的。有没有办法通过某种回调函数解决这个问题?

1 个答案:

答案 0 :(得分:4)

此处的问题与for循环无关,而是来自您使用wait(forDuration:withRange:)的事实,这是预期的行为。文档说明:

  

创建一个随机时间段空闲的动作。

我认为您正在寻找wait(forDuration:)方法并且它可以正常工作:)