我有这个功能:
func midGroundlevelMovingSlow() {
let moveLevelImage = SKAction.moveByX(-self.frame.size.width, y: 0, duration: gameSpeed)
let replaceLevelImage = SKAction.moveByX(self.frame.size.width, y: 0, duration: 0)
let movingAndReplacingLevelImage = SKAction.repeatAction(SKAction.sequence([moveLevelImage,replaceLevelImage]), count: 5)
mgImage.runAction(movingAndReplacingLevelImage)
mgImage2.runAction(movingAndReplacingLevelImage)
}
一旦它完成了它的 5 循环,我想调用这个函数:
func midGroundlevelMovingMedium() {
let moveLevelImage = SKAction.moveByX(-self.frame.size.width, y: 0, duration: gameSpeed * 2)
let replaceLevelImage = SKAction.moveByX(self.frame.size.width, y: 0, duration: 0)
let movingAndReplacingLevelImage = SKAction.repeatAction(SKAction.sequence([moveLevelImage,replaceLevelImage]), count: 5)
mgImage.runAction(movingAndReplacingLevelImage)
mgImage2.runAction(movingAndReplacingLevelImage)
}
谁能帮我解决这个问题?
谢谢,
史蒂文
最佳答案
SKSpriteNode 有一个带有完成处理程序的运行操作函数。
sprite.runAction(action: SKAction) { () -> Void in
// call next function
}
您可以在该完成处理程序中运行您的下一个方法。
在您想要等待两个函数完成的情况下,您可以使用计数器并在调用下一个方法之前检查两个函数是否都已完成。
有点像
func midGroundlevelMovingSlow(completion: (()->Void)?) {
let moveLevelImage = SKAction.moveByX(-self.frame.size.width, y: 0, duration: gameSpeed)
let replaceLevelImage = SKAction.moveByX(self.frame.size.width, y: 0, duration: 0)
let movingAndReplacingLevelImage = SKAction.repeatAction(SKAction.sequence([moveLevelImage,replaceLevelImage]), count: 5)
var callCount = 2
mgImage.runAction(movingAndReplacingLevelImage){ () -> Void in
if --callCount == 0 {
completion?()
}
}
mgImage2.runAction(movingAndReplacingLevelImage){ () -> Void in
if --callCount == 0 {
completion?()
}
}
}
关于xcode - 在第一个函数完成后调用第二个函数,它是使用 Swift 的 SKAction 重复计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33303732/