首页 > 解决方案 > Swift:为掷骰子游戏实现游戏循环的更好方法是什么(不使用等待延迟)

问题描述

我正在构建一个简单的掷骰子游戏。

游戏循环是这样的:

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。

有没有更好的方法,更简单的方法来编写游戏循环?

标签: iosswift3sprite-kitskactiongame-loop

解决方案


推荐阅读