Пишу Android приложение на Kotlin.
Суть приложения: imageview перемещается сверху вниз и рикошетит снизу в верх (координата x статична). Эта imageview как бесконечный попрыгунчик. **НО:**
При нажатии на imageview (которая сама движется от верхней стенке к нижней и наоборот) скорость передвижения должна увеличиваться (чем больше скорость передвижения, тем сложнее попасть. В этом и смысл игры).
Я реализовал через такую "физику":
// btnBall - imageview, по нажатию которой увеличивается скорость передвижения
val btnBall = findViewById<ImageButton>(R.id.btnBall)
var speed_of_ball = 500F
btnBall.setOnClickListener(object : View.OnClickListener {
override fun onClick(view: View?) {
speed_of_ball += 10
}
})
// кнопка старт игры
ButtonStartGame.setOnClickListener {
val display = windowManager.defaultDisplay
val size = Point()
display.getSize(size)
val height: Int = size.y
var dt = 0.01
var yVel = speed_of_ball
var y = 1.0
var yPos = 0F
var flag_go_up = false
btnBall.y = yPos
GlobalScope.launch(context = Dispatchers.Main) {
while (true) { // бесконечный цикл передвижения в корутине
if (!flag_go_up) {
yPos += (dt * yVel).toFloat()
yVel += (dt * y).toFloat()
y += 0.01
btnBall.y = yPos
delay(5)
// проверка, что imageview не вышла за нижние границы экрана
if (yPos >= (height - btnBall.height)) {
flag_go_up = true
y = 1.0
yVel = speed_of_ball
}
} else { // иначе imageview перемещается снизу вверх
yPos -= (dt * yVel).toFloat()
yVel += (dt * y).toFloat()
y += 0.01
btnBall.y = yPos
delay(5)
if (yPos <= 0) {
flag_go_up = false
y = 1.0
yVel = speed_of_ball
}
}
}
}
}
Код рабочий, imageview бесконечно движется от верхней стенке к нижней стенке и наоборот.
Но эта imageview иногда подлагивает, т.е. она перемещается не со стабильной скоростью (то быстро, то медленно).
Где-то прочитал, что не хватает ресурсов, поэтому android иногда замедляет скорость перемещения imageview.
Как избавиться от лагов, сохранив задуманный функционал - увеличение скорости движения при нажатии на эту imageview?