我正在用力反馈在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}的定时检查之后}当对该函数进行大量调用时,它仍然有点呆滞。
我假设这不是同步调用,并且在我请求振动后代码会继续执行,但是我找不到支持它的文档。
有更好的策略吗?也许在执行此操作时应该注意一些陷阱?
答案 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)