swift - 正确检测同时 SKAction 的完成情况

标签 swift sprite-kit skaction swift2

我对 iOS 上的 native 编程还很陌生。我的游戏场景中有一个函数可以移动 SKSpriteNode 数组。每次移动完成后,应将其节点从场景中删除。该函数还有一个完成函数,应在删除所有 SKNode 后调用。我的问题是,是否有一种更干净的方法可以在 moveAction 的持续时间中添加一点额外的时间,直到调用完成函数(见下文)。我也尝试过 Action 序列,但无法想出可行的解决方案......

我们将不胜感激每一个帮助!

func animateNodes(nodes: Array<SKSpriteNode>, completion:() -> ()) {
    let duration = NSTimeInterval(0.5)
    for (_, node) in nodes.enumerate() {
        let point = CGPointMake(node.position.x - 80, node.position.y + 80)
        let moveAction = SKAction.moveTo(point, duration: duration)
        let fadeOutAction = SKAction.fadeAlphaTo(0, duration: duration)
        node.runAction(SKAction.group([moveAction, fadeOutAction]), completion: {
            node.removeFromParent()
        })
    }
    runAction(SKAction.waitForDuration(duration + 0.1), completion:completion)
}

最佳答案

添加一个变量count来跟踪当前事件的节点数量。在每个节点的完成中,递减计数并检查它是否是最后一个(count == 0),如果是,则运行完成操作:

func animateNodes(nodes: Array<SKSpriteNode>, completion:() -> ()) {
    var count = nodes.count
    let duration = NSTimeInterval(0.5)
    for (_, node) in nodes.enumerate() {
        let point = CGPointMake(node.position.x - 80, node.position.y + 80)
        let moveAction = SKAction.moveTo(point, duration: duration)
        let fadeOutAction = SKAction.fadeAlphaTo(0, duration: duration)
        node.runAction(SKAction.group([moveAction, fadeOutAction]), completion: {
            node.removeFromParent()
            count--
            if count == 0 {
                completion()
            }
        })
    }
}

我还没有编译或运行这个,所以可能会有错误,但这应该可以工作

关于swift - 正确检测同时 SKAction 的完成情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31074934/

相关文章:

ios - 如何将启动屏幕状态栏颜色设置为白色?

ios - 具有多个参数和 "AND behaviour"的 NSPredicate

ios - 按钮似乎只能在多次点击后禁用

ios - 知道 skspritenode 已经完全移动到另一个 skspritenode 上

ios - 为什么 applicationWillResignActive 方法不起作用?

ios - 我小时候在我的玩家类中为我的玩家制作了一个碰撞箱 Sprite 。如何在 gamescene 的 didBegin 方法中访问 hitbox Sprite ?

objective-c - 画一个没有纹理的圆

swift : Color Changing SKSpriteNode on repeat

swift - 在 Swift 中转换 followPath(_ :asOffset:orientToPath:speed:) to iOS 7. 1 兼容版本

swift - SKAction 按键改变 Sprite 行为