【发布时间】:2019-08-29 17:18:00
【问题描述】:
我正在尝试创建 2 个函数。一个沿 y 轴(向上)移动精灵(汽车),一个旋转它(向左或向右旋转 90 度)。
我创建了两个函数(moveCarForward() 和 rotateCar(angle)),它们的代码几乎相同,但内部的动作不同。
let waitAction = SKAction.wait(forDuration: 1)
let rotateAction = SKAction.rotate(byAngle: angle, duration: 1)
let doneAction = SKAction.run({ [weak self] in
car?.removeAction(forKey: "carRotating")
})
let moveActionWithDone = SKAction.sequence([waitAction, rotateAction, doneAction])
self.car!.run(moveActionWithDone, withKey: "carRotating")
现在我的问题是,在我的 GameViewController 中,我希望能够以我想要的任何顺序调用操作。例如调用(向前,向右旋转,向前,向左旋转),但是当我运行代码时,动作是无序的(或者有时如果我向前移动两次,总是会忽略一个)。我认为这是因为运行操作是异步执行的,因此一些操作在另一个完成之前开始运行。我知道动作序列在这里很有帮助,但这是一个面向初学者的函数教程,我需要能够从 ViewController 中单独调用每个函数。我尝试使用 DispatchGroup() 但它要么阻塞主线程,要么让它们乱序运行(我可能使用错了)。非常感谢任何帮助!
【问题讨论】:
标签: ios swift asynchronous sprite-kit grand-central-dispatch