gpt4 book ai didi

swift - 如何在再次循环之前完成 SKAction

转载 作者:行者123 更新时间:2023-11-30 11:37:22 24 4
gpt4 key购买 nike

我有一个使用 for 循环在 SKScene 周围移动矩形的函数。有没有办法让矩形在调用 SKAction 后立即移动?它等待运行 SKAction 直到循环完成,这不是我想要做的。

这是我的代码示例:

for i in 0...newHeights.count-1 {
for j in stride(from: 0, to: newHeights.count-i-1, by: 1){
let moveRect = SKAction.moveTo(x: rectangles[j].position.x, duration: 5)
moveRect.timingMode = SKActionTimingMode.easeInEaseOut
rectangles[j+1].run(moveRect)
let sequence = SKAction.sequence([moveRect])
rectangles[j+1].run(sequence)
}
}

编辑:现在该部分正在工作,但它以意想不到的方式移动。我可以通过执行

来切换位置
rectangles[j].position.x = rectangles[j+1].position.x
rectangles[j+1].position.x = y

但是当我尝试使用 SKActions 移动它们时,它会以完全不同的方式移动它们。

let moveRect = SKAction.moveTo(x: rectangles[j+1].position.x, duration: 1)
//moveRect.timingMode = SKActionTimingMode.easeInEaseOut
let waitAction = SKAction.wait(forDuration: 2)
let sequence = SKAction.sequence([moveRect, waitAction])

let moveRect2 = SKAction.moveTo(x: y, duration: 1)
moveRect2.timingMode = SKActionTimingMode.easeInEaseOut
let waitAction2 = SKAction.wait(forDuration: 2)
let sequence2 = SKAction.sequence([moveRect2, waitAction2])

rectangles[j].run(sequence) {
self.rectangles[j+1].run(sequence2)
}

最佳答案

正如评论中所讨论的,将速度设置为0,然后在当前节点完成时打开下一个节点的速度

唯一的问题是,0 会发生什么?这是故意留空的吗?

for i in 0..<newHeights.count {
for j in stride(from: 0, to: newHeights.count-i-1, by: 1){
let moveRect = SKAction.moveTo(x: rectangles[j].position.x, duration: 5)
let startNextRect = SKAction.run{if (j+2 < newHeights.count){self.rectangles[j+2].speed = 1}}
moveRect.timingMode = SKActionTimingMode.easeInEaseOut
let seq = SKAction.sequence([moveRect,startNextRect])
rectangles[j+1].run(seq)
rectangles[j+1].speed = 0

}
}
rectangles[1].speed = 1

关于swift - 如何在再次循环之前完成 SKAction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49600371/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com