Как вызывать функцию раз в секунду?
Есть цикл, в котором при перемещении объекта, вызывается функция moveBullet.
if (event.action == MotionEvent.ACTION_MOVE) {
player.translationX = x
player.translationY = y
moveBullet(container)
}
А функция moveBullet в свою очередь создает пулю из drawBullet и запускает её в движение.
private fun drawBullet(container: FrameLayout): ImageView {
return ImageView(container.context).apply {
this.setImageResource(R.drawable.bullets)
this.layoutParams = FrameLayout.LayoutParams(160, 160)
(this.layoutParams as FrameLayout.LayoutParams).leftMargin = x
(this.layoutParams as FrameLayout.LayoutParams).topMargin = y
}
}
Все работает хорошо, но проблема в том что moveBullet выполняется при каждом px перемещении.
Как можно реализовать чтобы функция moveBullet вызывалась раз в секунду пока player в движении?
Ответы (1 шт):
Автор решения: Михаил
→ Ссылка
Используй таймер :
private var isCanShot = true
private val DURATION = 1000L
if (event.action == MotionEvent.ACTION_MOVE) {
player.translationX = x
player.translationY = y
if (isCanShot) {
isCanShot = false
startShotTimer()
moveBullet(container)
}
}
private fun startShotTimer () {
object : CountDownTimer(DURATION, DURATION) {
override fun onTick(p0: Long) {
}
override fun onFinish() {
isCanShot = true
}
}.start()
}
