ios - Swift 中的多重延迟

标签 ios swift delay timedelay

我正在开发一款简单的纸牌游戏,玩家按下一个按钮后,三台人工智能计算机将依次轮流进行。但是,我需要在每个回合之间有一个暂停。

这是我需要的:

playerButton > PAUSE > computer1Goes > PAUSE > computer2Goes > PAUSE > computer3Goes

代码:

@IBAction func placeCardAction(sender: UIButton) {

    // playerButton does this action
    var playerCardOnTop = game!.player.deck.placeCard()
    middleDeck.addSingleCard(playerCardOnTop)
    updateCardCount()

    // Start computer actions
    let delay = 2.0 * Double(NSEC_PER_SEC)
    let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
    dispatch_after(time, dispatch_get_main_queue()) {
        self.game?.computer1PlacesCard(&self.middleDeck)
        self.updateCardCount()
    }

    let delay2 = 2.0 * Double(NSEC_PER_SEC)
    let time2 = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
    dispatch_after(time2, dispatch_get_main_queue()) {
        self.game?.computer2PlacesCard(&self.middleDeck)
        self.updateCardCount()
    }

    let delay3 = 2.0 * Double(NSEC_PER_SEC)
    let time3 = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
    dispatch_after(time3, dispatch_get_main_queue()) {
        self.game?.computer3PlacesCard(&self.middleDeck)
        self.updateCardCount()
    }
}

不幸的是,所有延迟同时开始/结束,所以最终发生的是所有计算机功能同时运行,而不是一个接一个地轮流运行。

如果有人能帮助解决这个问题,我将不胜感激!

最佳答案

最简单的解决方案....将 delay2 更改为 4,将 delay3 更改为 6。就目前而言,当然它们都同时关闭,它们都有相同的延迟。

或者,像这样堆叠它们:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(delay))) {
    // step one
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(delay))) {
        // step two
        ...
    }
}

关于ios - Swift 中的多重延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35516458/

相关文章:

ios - Swift 3 - 仅在 View Controller 内部 Segues Collection View 的接口(interface)

ios - 不能通过委托(delegate)从另一个类执行方法?

ios - Swift:使用对象工厂导致无法识别的选择器

jquery - 延迟后淡出 jQuery 菜单

javascript - jQuery 延迟没有按预期工作

python - 延迟敌人射击

ios - UIScrollView 在不同设备上快速运行时不滚动或部分滚动

ios - 如何使用 Swift 3 打电话?

swift - 我收到错误 - 使用未声明的类型 'BaseCell' - 尝试按照教程在 Swift 中创建 Cell 文件时

ios - 如何使用 HTML 标签在 swift 中显示表格