gfgruvin
gfgruvin

Reputation: 495

Trying to move SKShapeNodes one at a time in a loop

I want to move the nodes from an offscreen position and line them up across the X-axis spaced out. The nodes have been created and stored in an array. I have the following code to do it. However, all of the nodes move at the same time. I want them to move successively when the prior node is in its new position. I have tried altering the duration of the wait action, but it doesn't work.

Thanks

    var shapeNodes: [SKShapeNode] = [SKShapeNode]()
    let w = (size.width + size.height) * 0.05

    for _ in 1...5 {
        let s = SKShapeNode(rectOf: CGSize(width: w, height: w), cornerRadius: w * 0.3)
        s.position = CGPoint(x: frame.midX, y: frame.maxY + 75)
        s.zPosition = 3
        s.fillColor = UIColor.cyan
        shapeNodes.append(s)
        addChild(s)
    }

    var posX: CGFloat = 0.0
    for n in shapeNodes {
        let m = SKAction.moveBy(x: posX, y: -300, duration: 2.0)
        m.timingMode = .easeIn
        let w = SKAction.wait(forDuration: 2.0)
        let seq = SKAction.sequence([ m, w ])
        n.run(seq)
        posX += 125
    }

Upvotes: 2

Views: 28

Answers (1)

nathangitter
nathangitter

Reputation: 9795

Give each node a wait action with a duration equal to the animation time of all previous nodes. The logic is very similar to your logic with the posX variable.

var posX: CGFloat = 0.0
var waitDuration: CGFloat = 0
for n in shapeNodes {
    let duration = 2
    let m = SKAction.moveBy(x: posX, y: -300, duration: duration)
    m.timingMode = .easeIn
    let w = SKAction.wait(forDuration: waitDuration)
    let seq = SKAction.sequence([w, m])
    n.run(seq)
    posX += 125
    waitDuration += duration
}

In the example above, I created another variable called waitDuration, which keeps track of the total time the node should wait before animating.

The duration of the wait action is set to the waitDuration, and at the end of the loop, I increase the waitDuration by the duration of the move action.

Upvotes: 2

Related Questions