В настоящее время я учусь разрабатывать android приложений. Для моего первого приложения я хотел создать простой кликер с примитивной боевой системой.
В своем коде я создал экземпляр обработчика и запускаемый объект, Внутри этого «задержанного l oop» противник атакует экземпляр игрока каждые 3 секунды, нанося урон. Внутри l oop я также проверяю, когда 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)
}