Обнаружьте определенное встряхивающее движение (проиллюстрировано: D) - PullRequest
0 голосов
/ 22 августа 2011

Я занимаюсь разработкой Android-платформера. Я хотел сделать контроль прыжков, где вы, в основном, встряхиваете телефон. Однако, как вы, вероятно, можете сказать, я немного озадачен.

У меня есть значения X, Y, Z от акселерометра, как мне узнать, трясет ли плеер телефон? Насколько я знаю, это не тривиально ... по крайней мере, для меня.

Трясти может быть неправильным словом, это больше похоже на перемещение телефона вверх, чтобы прыгать. Я не знаю, как объяснить это словами, вот прекрасная иллюстрация:

Demo of shaking phone?

Ответы [ 4 ]

2 голосов
/ 22 августа 2011

Я собираюсь описать, как это сделать вручную.

Акселерометр возвращает значения, соответствующие ускорению, ощущаемому объектом.

Например, если значение X высокое, это означает, что телефон ускоряется в своем направлении X.Однако из одного снимка вы не знаете, происходит ли это ускорение из-за тряски или из-за внезапного движения в устойчивом направлении.

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

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

Конечно, сделайте это для ускорений X, Y и Z индивидуально, а затем добавьте значения рывков, чтобы получить последнее значение, котороепроверяется на порог.

0 голосов
/ 23 августа 2011

Я думаю, что вы должны усреднить показания акселерометра по времени примерно за 250 мс, а затем посмотреть, не превышает ли значение avg значения (на ваше усмотрение и в зависимости от требований приложения) в ожидаемом направлении.если это произойдет, ваше действие завершено.когда вы трясете, среднее значение времени акселерометра будет в основном нейтральным.но то, что я описал выше, нужно будет неоднократно проверять, чтобы нарезать правильные числа для лучшего взаимодействия с пользователем.

0 голосов
/ 22 августа 2011

Думайте о координатах акселерометра Рура как о шаре с инерцией. Если телефон прыгает, мяч прыгает (Z поднимается, а затем возвращается).

0 голосов
/ 22 августа 2011

Вы хотите использовать Датчики линейного ускорения для выполнения этой задачи.

Просто введите тип датчика в код триггера и укажите любую необходимую логику в onSensorChanged().

Надеюсь, это поможет!

...