Как вызывать функцию раз в секунду?

Есть цикл, в котором при перемещении объекта, вызывается функция 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()
}
→ Ссылка