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