我目前正在学习如何开发android应用程序。对于我的第一个应用程序,我想构建一个带有原始战斗系统的简单答题器。
在我的代码中,我创建了Handler实例和Runnable对象。在此“延迟循环”内,敌人每3秒攻击一次玩家实例,造成伤害。在循环内,我还测试了玩家的hp何时小于或等于0;当满足条件时,我要停止可运行对象。
我该怎么做?我尝试调用包含stopCombat()
的函数Handler.removeCallbacks
,但是在声明之前无法调用函数。我尝试将.removeCallbacks(this)
放到run()
内,但是它也不起作用。
val mainHandler = Handler(Looper.getMainLooper())
fun playerDied() {
ongoingFight = false
combatLog.append("${myPlayer.name} has been defeated!\n")
myPlayer.currentHitPoints = myPlayer.maxHitPoints / 2
myPlayer.gold = 0
gold.text = "${myPlayer.gold} gold"
}
val performTask = object : Runnable {
override fun run() {
val enemyHit = enemyAttack(myPlayer, myEnemy)
// Call a function to stop this thread if the condition is met:
if (myPlayer.takeDamage(enemyHit)) { //myPlayer.takeDamage returns true if hp <= 0
playerDied()
stopCombat() // called before declaration
mainHandler.removeCallbacks(this) // tried, doesn't work
}
playerHP.text = "${myPlayer.currentHitPoints} / ${myPlayer.maxHitPoints}"
combatLog.append("${myEnemy.name} deals $enemyHit damage!\n")
mainHandler.postDelayed(this, 3000)
}
}
fun stopCombat(){
mainHandler.removeCallbacks(performTask)
}
val executorService = Executors.newSingleThreadExecutor()
val runnables = Runnable {
}
val task = executorService.submit(runnables)
task.cancel(true)