尝试在一个循环中一次移动一个SKShapeNodes
问题描述:
我想从离屏位置移动节点并将它们跨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
}
答
给每个节点用等于以往所有节点的动画时间的持续时间的等待行动。该逻辑非常类似于您的逻辑与变量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
。
是的,正是我想在这里做的。感谢您的教育。 – gfgruvin