ios - 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。
有没有更好的方法,更简单的方法来编写游戏循环?
解决方案
推荐阅读
- python-3.x - Python API 身份验证
- python - 将元组列表和列表转换为字典
- charts - 均衡器,如 highcharts 中的直方图
- flutter - 在 Flutter 中获取 TextFormField 的选择
- google-bigquery - 如何将多条记录插入 BigQuery 中特定行的重复记录字段?
- node.js - 花费超过 3 分钟更新 Firestore 文档
- c# - “syslog”和“daemon.log”中的重复日志
- wordpress - WooCommerce 优惠券类型百分比:在洞车上,包括订单费
- c# - 如何在 C# 中使用添加的自定义标签将 JSON 转换为 XML
- jsp - Displaytag:仅在有行时才考虑列的大小