2017-10-13 149 views
2

我想从离屏位置移动节点并将它们跨X轴间隔排列。节点已经创建并存储在一个数组中。我有下面的代码来做到这一点。但是,所有节点都在同一时间移动。当前节点处于新位置时,我希望它们连续移动。我尝试改变等待操作的持续时间,但它不起作用。尝试在一个循环中一次移动一个SKShapeNodes

感谢

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 
    } 

回答

2

给每个节点用等于以往所有节点的动画时间的持续时间的等待行动。该逻辑非常类似于您的逻辑与变量posX

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 
} 

在上面的例子中,我创建另一个变量称为waitDuration,其跟踪的总时间的节点动画之前应该等待。

等待动作的持续时间设置为waitDuration,并且在循环结束时,移动动作的持续时间增加waitDuration

+1

是的,正是我想在这里做的。感谢您的教育。 – gfgruvin