Я строю простую игру с броском костей.
Цикл игры выглядит следующим образом:
1) Кидайте кости и перемещайте фигуру
2) Проверьте, есть ли дополнительные бонусные ходы, если Да, то переместите фигуру
3) Проверьте, достигла ли часть места назначения, если да, тогда Игра заканчивается
4) Конец хода
Я построил свой игровой цикл с помощью операторов SKAction.run и добавил их вмассив, а затем запустить их.
Фактический код очень длинный, поэтому я предоставляю только базовый поток здесь.
func runDiceRoll() {
// some SKActions
}
func checkExtraMoves() {
// run some SKActions depending on runDiceRoll() outcome
}
func checkStatus() {
// code to check if Game ends, depends on checkExtraMoves() outcome
}
func endTurn() {
// code to end the player's turn and give it to the other player
}
Мой игровой цикл выглядит примерно так
func runGameCycle() {
var actions = [SKAction]()
let actionRun = SKAction.run {runDiceRoll()}
let actionCheckExtraMoves = SKAction.run {checkExtraMoves()}
let actionCheckStatus = SKAction.run {checkStatus()}
let actionEndTurn = SKAction.run {endTurn()}
let actionWait = SKAction.wait(forDuration:2.0)
actions.append(actionRun)
actions.append(actionWait)
actions.append(actionCheckExtraMoves)
actions.append(actionCheckStatus)
actions.append(actionEndTurn)
piece.run(SKAction.sequence(actions))
}
Если я уберу действие «Ожидание», то игра будет неправильной.
Я бы предпочел не использовать продолжительность «Ожидание», потому что это всего лишь оценка того, что предыдущие действия будут выполнены через 2 секунды.или менее.
Я думаю, что было бы лучше, если бы все действия ожидали завершения предыдущего действия перед тем, как выстрелить.Я не уверен, как использовать обработчик завершения или DispatchQueue для таких целей.
Есть ли лучший способ, более надежный способ написания игрового цикла?