Kotlin - UI 更新之间的延迟
Kotlin - delay between UI updates
我创建了一个简单的 tik-tac-toe 游戏,并且有一些机器人可以和您一起玩。我试图在连续的机器人回合之间有一个延迟,否则所有连续的机器人移动都会同时出现在屏幕上
这是我在代码中尝试过的内容:
// bot functionality
private fun botTurn(botDifficulty: Int) {
var botMove = 100
when (botDifficulty) {
1 -> botMove = easyBot(confirmedMoves)
2 -> botMove = mediumBot(activePlayer, confirmedMoves, maxPlayers)
3 -> botMove = hardBot(activePlayer, confirmedMoves, maxPlayers)
else -> Toast.makeText(this, "What sort of bot is this??", Toast.LENGTH_SHORT).show()
}
trueCellID = botMove
// colour chosen segment
setSegmentColor(trueCellID, -1, activePlayer)
// TODO add 1-2 second delay after confirming move?
Log.d("Wait", "start of wait $activePlayer")
Thread.sleep(1000)
Log.d("Wait", "end of wait $activePlayer")
confirmMove()
}
使用 Thread.sleep 似乎只是将所有 UI 更新延迟到所有 botPlayer 睡眠都发生之后。我也尝试过使用 Handler.postDelayed
、GlobalScope.launch
和 delay
块以及 runOnUiThread
和 SystemClock.sleep(1000)
- 这些都有同样的问题,就是所有的机器人都在等待,然后 UI 更新。
我什至尝试调整此解决方案 - how to wait for Android runOnUiThread to be finished? 但得到了相同的结果 - 延迟很大然后所有 UI 更新。
是否有解决此问题的方法,还是我错过了一些简单的事情?
正如 broot 在评论中建议的那样,将 setSegmentColor()
和 confirmMove()
都放在 postDelayed()
块内实现了 botTurn()
之间的预期延迟
val botDelay = 1500L
Handler().postDelayed(
{
// colour chosen segment then save move
setSegmentColor(botMove, -1, activePlayer)
confirmMove(botMove)
},
botDelay
)
我创建了一个简单的 tik-tac-toe 游戏,并且有一些机器人可以和您一起玩。我试图在连续的机器人回合之间有一个延迟,否则所有连续的机器人移动都会同时出现在屏幕上
这是我在代码中尝试过的内容:
// bot functionality
private fun botTurn(botDifficulty: Int) {
var botMove = 100
when (botDifficulty) {
1 -> botMove = easyBot(confirmedMoves)
2 -> botMove = mediumBot(activePlayer, confirmedMoves, maxPlayers)
3 -> botMove = hardBot(activePlayer, confirmedMoves, maxPlayers)
else -> Toast.makeText(this, "What sort of bot is this??", Toast.LENGTH_SHORT).show()
}
trueCellID = botMove
// colour chosen segment
setSegmentColor(trueCellID, -1, activePlayer)
// TODO add 1-2 second delay after confirming move?
Log.d("Wait", "start of wait $activePlayer")
Thread.sleep(1000)
Log.d("Wait", "end of wait $activePlayer")
confirmMove()
}
使用 Thread.sleep 似乎只是将所有 UI 更新延迟到所有 botPlayer 睡眠都发生之后。我也尝试过使用 Handler.postDelayed
、GlobalScope.launch
和 delay
块以及 runOnUiThread
和 SystemClock.sleep(1000)
- 这些都有同样的问题,就是所有的机器人都在等待,然后 UI 更新。
我什至尝试调整此解决方案 - how to wait for Android runOnUiThread to be finished? 但得到了相同的结果 - 延迟很大然后所有 UI 更新。
是否有解决此问题的方法,还是我错过了一些简单的事情?
正如 broot 在评论中建议的那样,将 setSegmentColor()
和 confirmMove()
都放在 postDelayed()
块内实现了 botTurn()
val botDelay = 1500L
Handler().postDelayed(
{
// colour chosen segment then save move
setSegmentColor(botMove, -1, activePlayer)
confirmMove(botMove)
},
botDelay
)