Как я могу использовать SensorManager.getOrientation для элементов управления наклоном, таких как «Мой бумажный самолетик»?

Игра для Android My Paper Plane - отличный пример того, как реализовать элементы управления наклоном, но я ' Я изо всех сил пытался понять, как я могу сделать что-то подобное.

У меня есть следующий пример, в котором используется getOrientation () из SensorManager. Все это находится на pastebin здесь . Он просто печатает значения ориентации в текстовые поля. Вот наиболее подходящий фрагмент:

private void computeOrientation() {
    if (SensorManager.getRotationMatrix(m_rotationMatrix, null,
                                        m_lastMagFields, m_lastAccels)) {
        SensorManager.getOrientation(m_rotationMatrix, m_orientation);

        /* 1 radian = 57.2957795 degrees */
        /* [0] : yaw, rotation around z axis
         * [1] : pitch, rotation around x axis
         * [2] : roll, rotation around y axis */
        float yaw = m_orientation[0] * 57.2957795f;
        float pitch = m_orientation[1] * 57.2957795f;
        float roll = m_orientation[2] * 57.2957795f;

        /* append returns an average of the last 10 values */
        m_lastYaw = m_filters[0].append(yaw);
        m_lastPitch = m_filters[1].append(pitch);
        m_lastRoll = m_filters[2].append(roll);
        TextView rt = (TextView) findViewById(R.id.roll);
        TextView pt = (TextView) findViewById(R.id.pitch);
        TextView yt = (TextView) findViewById(R.id.yaw);
        yt.setText("azi z: " + m_lastYaw);
        pt.setText("pitch x: " + m_lastPitch);
        rt.setText("roll y: " + m_lastRoll);
    }
}

Проблема в том, что выдаваемые значения выглядят бессмысленно, или, по крайней мере, нет способа определить, какой тип движения совершил пользователь. Я нарисовал диаграмму, чтобы указать 2 типа движения, которые я хотел бы обнаружить - 1. «наклон» для тангажа и 2. «поворот» для крена / поворота:

Figure 1. Pitch and roll

(Это изометрический вид на телефон в альбомном режиме, конечно)

Когда я наклоняю телефон вперед и назад вдоль его длинной оси - показано цифрой 1. - Я ожидал, что только одно из значений сильно изменится, но все они, кажется, кардинально меняются. Точно так же, если я поверну телефон вокруг воображаемой линии, выходящей из экрана - как показано на рисунке 2. - я надеюсь, что изменится только значение поворота, но все значения сильно изменятся.

Проблема в том, когда я откалибровать мою игру - что означает запись текущих значений углов x, y и z - позже я не знаю, как интерпретировать входящие обновленные углы, чтобы сказать: «Хорошо, похоже, вы наклонили телефон и хотите повернуть на 3 градуса» оставил". Это больше похоже на «хорошо, вы переместили телефон, и вы одновременно наклоняетесь и крутитесь», даже если намерение было всего лишь поворотом. Есть смысл?

Есть идеи? Я пробовал использовать remapCoordinateSystem, чтобы увидеть, влияет ли изменение оси. Никакой радости. Я думаю, что мне не хватает чего-то фундаментального: и используя инструмент AL, мы можем присвоить сборке строгое имя. И у нас также есть инструмент Sign, который используется для подписи ...

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

. И у нас также есть инструмент Sign, который используется для подписи сборки (возможно, для использования исключительно с сертификатами?).

В чем точная разница между ними ?. Нужно ли использовать инструмент подписи при работе с сертификатами и можем ли мы получить его SN? Или они совершенно разные? (12221] Пожалуйста, помогите.

13
задан sveerap 2 January 2011 в 00:31
поделиться