Цель C: Размах камеры от пальца пользователя

Мой вопрос заключается в том, какой алгоритм или математику я должен использовать, чтобы сохранить импульс пролистывания экрана, чтобы сохранить прокрутку, если пользователь делает быстрое пролистывание.

Пример: на экране есть изображение, которое вращается по кругу, если пользователь медленно проведет пальцем по камере, он просто будет двигаться вместе с пальцем. Однако, если пользователь делает это действительно быстро, изображение должно вращаться вокруг как карусель в течение нескольких секунд после того, как пользователь быстро проведет пальцем?

Я могу понять момент, когда пользователь коснулся экрана, и момент, когда пользователь продолжал смахивать и поднимать палец, есть идеи?

У меня есть метод, который вызывается 60 раз в секунду, так что есть идеи?

1 ответ

Решение

По сути, вам нужна начальная скорость (например, измеряется в точках в секунду) и скорость замедления (измеряется в точках в секунду ^2). Если вы используете распознаватель жестов для обнаружения удара, он даст вам скорость бесплатно. В противном случае вам придется рассчитывать его самостоятельно по позициям и временным меткам различных этапов прокрутки.

Теперь, в вашем методе обновления, продвиньте свой взгляд согласно скорости:

distance travelled = velocity * time

И используйте скорость замедления, чтобы обновить скорость для следующего кадра:

delta_v = deceleration rate * time // should give a negative value
new velocity = velocity + delta_v

Как только скорость упадет до порога, близкого к 0, остановите движение.

Эти формулы предназначены для линейных движений, но даже если вы делаете круговые движения, я бы попробовал поэкспериментировать с ними. Или вы можете сделать те же вычисления с угловыми скоростями. В Википедии, вероятно, есть формулы, которые вам нужно знать.

Другие вопросы по тегам