使用Android振动器似乎有点慢,有什么好的策略?

时间:2018-12-05 22:41:18

标签: performance kotlin

我正在用力反馈在Kotlin中制作一个相对简单的游戏。每当物体碰到墙壁时,我都希望手机振动。

这是我的代码,通常可以正常工作:

val vibT = 0L
val vibrator: Vibrator by lazy {
    getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
}

然后:

fun bump() {
    var now = System.currentTimeMillis()
    if ( vibrator.hasVibrator() && now>vibT+51) {
        vibrator.cancel()
        vibrator.vibrate(VibrationEffect.createOneShot(50, VibrationEffect.DEFAULT_AMPLITUDE))
        vibT = now
    }
}

看起来,当代码快速连续运行ump()函数时(例如,当多个对象撞到墙上时),重绘会变得很缓慢。如果我注释掉行vibrator.vibrate(...),则游戏运行平稳。

起初,我以为我可能只是想在函数仍处于振动状态时调用该函数,从而导致振动请求积压,但即使在添加了now和{{1}的定时检查之后}当对该函数进行大量调用时,它仍然有点呆滞。

我假设这不是同步调用,并且在我请求振动后代码会继续执行,但是我找不到支持它的文档。

有更好的策略吗?也许在执行此操作时应该注意一些陷阱?

1 个答案:

答案 0 :(得分:0)

尝试一下。

// this initiates the android vibrator [ put this on the onCreate ]
val vibe = this@MainActivity.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator

然后

// put this where you want the vibrator to activate (fun bump*())
val vibratorService = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
vibratorService.vibrate(40)