Вы можете попробовать следующее:
final float DECEL = 0.95;
final float FRICTION = 0.001;
spin = spin * DECEL - FRICTION;
Это предполагает, что это вызывается через регулярный интервал времени.
Дополнительный «- FRICTION» есть, так что колесо действительно остановится.
Если ваш цикл рисования вызывается с разницей во времени с момента последнего рисования кадра, вы можете использовать это для настройки параметров DECEL и FRICTION.
Например, вы можете иметь:
final float DECEL = 0.95;
final float FRICTION = 0.001;
// calculate how much the wheel will slow down
float slowdown = spin - (spin * DECEL - friction);
// Apply the frametime delta to that
slowdown *= frameDelta;
spin = spin - slowdown;
Это, конечно, потребует некоторых экспериментов с параметрами DECEL и FRICTION.