Вы говорите здесь о двух разных вещах.
Одним из них является импульс - придание вещам остаточного движения, когда вы освобождаете их от перетаскивания. Это просто запоминание скорости объекта, когда пользователь его отпускает, затем применение этой скорости к объекту в каждом кадре, а также уменьшение скорости каждого кадра на некоторое количество. То, как вы уменьшаете скорость в каждом кадре, - это то, с чем вы экспериментируете, чтобы правильно почувствовать себя.
Другая вещь - это легкая анимация. Речь идет о плавном ускорении / замедлении объектов при перемещении их между двумя позициями, а не просто линейной интерполяции. Вы делаете это, просто передавая свое значение времени через сигмовидную функцию, прежде чем использовать его для интерполяции объекта между двумя позициями. Одна такая функция
smoothstep(t) = 3*t*t - 2*t*t*t [0 <= t <= 1]
Это дает вам как легкое, так и легкое поведение. Тем не менее, вы чаще будете видеть только смягчение в графических интерфейсах. То есть объекты начинают двигаться быстро, а затем медленно останавливаются в своей конечной позиции. Чтобы добиться этого, вы просто используете правую половину кривой, т. Е.
smoothstep_eo(t) = 2*smoothstep((t+1)/2) - 1