Android Акселерометр покачивается

Когда я быстро наклоняю свой мобильный телефон влево или вправо, чтобы переместить проигрыватель в моем приложении, проигрыватель на короткое время начинает покачиваться. Как я могу удалить этот эффект и сделать его таким же плавным, как, например, в Doodle Jump? Я использую необработанные значения событий датчика акселерометра для добавления к координатам игрока. Есть ли какой-либо алгоритм или я должен просто использовать датчик по-другому?

public void onSensorChanged(SensorEvent event) {
            if (event.sensor.getType() != SENSOR)
                return;
            if(this.isRunning()) {
                spieler.setMoveSpeed(-event.values[0]);
            }
}

1 ответ

Решение

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

Пример кода:

            float rawX = event.values[0];
            float rawY = event.values[1];
            float rawZ = event.values[2];

            // Apply low-pass filter
            mGravity[0] = lowPass(rawX, mGravity[0]);
            mGravity[1] = lowPass(rawY, mGravity[1]);
            mGravity[2] = lowPass(rawZ, mGravity[2]);

Для получения дополнительной информации о фильтре нижних частот см. http://developer.android.com/reference/android/hardware/SensorEvent.html

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