Цель C: Размах камеры от пальца пользователя
Мой вопрос заключается в том, какой алгоритм или математику я должен использовать, чтобы сохранить импульс пролистывания экрана, чтобы сохранить прокрутку, если пользователь делает быстрое пролистывание.
Пример: на экране есть изображение, которое вращается по кругу, если пользователь медленно проведет пальцем по камере, он просто будет двигаться вместе с пальцем. Однако, если пользователь делает это действительно быстро, изображение должно вращаться вокруг как карусель в течение нескольких секунд после того, как пользователь быстро проведет пальцем?
Я могу понять момент, когда пользователь коснулся экрана, и момент, когда пользователь продолжал смахивать и поднимать палец, есть идеи?
У меня есть метод, который вызывается 60 раз в секунду, так что есть идеи?
1 ответ
По сути, вам нужна начальная скорость (например, измеряется в точках в секунду) и скорость замедления (измеряется в точках в секунду ^2). Если вы используете распознаватель жестов для обнаружения удара, он даст вам скорость бесплатно. В противном случае вам придется рассчитывать его самостоятельно по позициям и временным меткам различных этапов прокрутки.
Теперь, в вашем методе обновления, продвиньте свой взгляд согласно скорости:
distance travelled = velocity * time
И используйте скорость замедления, чтобы обновить скорость для следующего кадра:
delta_v = deceleration rate * time // should give a negative value
new velocity = velocity + delta_v
Как только скорость упадет до порога, близкого к 0, остановите движение.
Эти формулы предназначены для линейных движений, но даже если вы делаете круговые движения, я бы попробовал поэкспериментировать с ними. Или вы можете сделать те же вычисления с угловыми скоростями. В Википедии, вероятно, есть формулы, которые вам нужно знать.