ios - 检测 SKAction 是否完成运行,Swift

标签 ios swift sprite-kit

我想在操作运行后而不是在运行期间更改变量的值。这是我的代码:

   override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {

    if gameNotStarted {
        if firePosition.x != 320 || firePosition.y > 280 {  
            fire.runAction(fireButtonReturn)
            iapButton.runAction(iapButtonReturn)
            aboutButton.runAction(abtButtonReturn)

            if fire.hasActions() == false {
                println("has no actions")
                firePosition.x = 320
                firePosition.y = 280
            } 
        }       
    }
}

我正在运行的三个 Action 具有完全相同的持续时间,因此我只需要一个来检查它们是否已完成运行。在它们完成运行后,我想更改firePosition.xfirePosition.y 的值。 非常重要的一点是,开火位置值恰好在 Action 运行后发生变化,绝对不会在 Action 运行完成之前发生变化。

但是,对于我当前的代码,我从不根据结果和控制台运行 if fire.hasActions() ... 部分。 我发现了类似的问题,它们在 obj-c 中。 感谢您的帮助。

最佳答案

您应该针对您的问题使用完成处理程序:

//Run the action
iapButton.runAction(iapButtonReturn,
    //After action is done, just call the completion-handler.
    completion: {
        firePosition.x = 320
        firePosition.y = 280
    }
)

或者您可以使用 SKAction.sequence 并将您的操作添加到 SKAction.block 中:

var block = SKAction.runBlock({
    fire.runAction(fireButtonReturn)
    iapButton.runAction(iapButtonReturn)
    aboutButton.runAction(abtButtonReturn)
})

var finish = SKAction.runBlock({
    firePosition.x = 320
    firePosition.y = 280
})

var sequence = SKAction.sequence([block, SKAction.waitForDuration(yourWaitDuration), finish])

self.runAction(sequence)

关于ios - 检测 SKAction 是否完成运行,Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29731925/

相关文章:

swift - 尝试从函数外部调用时数组返回空[swift]

ios - SKShapeNode 尺寸错误

swift - SpriteKit 场景编辑器

ios - 更改标签栏背景透明度

ios - 在上传到服务器之前使用 Canvas 调整 Iphone 图片的大小

ios - 乘以随机数并打印结果

ios - 从 Objective-C 文件中的 AppDelegate.swift 访问 UIWindow

ios - Sprite 套件碰撞 : ignore transparency?

ios - GID.sharedInstance().signIn() 导致应用程序崩溃

ios - getEnhanced Microphone() 在 IOS 空中移动设备上不起作用(减少回声)