Доступ к данным рулона ориентации шаток для Android - PullRequest
0 голосов
/ 04 марта 2012

Итак, я создаю игру для android, которая использует вращение устройства, чтобы установить положение главного героя. Позиция обновляется каждый раз, когда запускается метод .onSensorChanged (event). Проблема в том, что даже когда я запускаю свое приложение и устанавливаю телефон на столешницу, значения значительно меняются (примерно на два градуса). Чувствительность собранных данных также не кажется очень точной, так как разница в углах, по-видимому, с шагом около 0,4 градуса при каждом изменении. Использование

Log.e(TAG, "roll: " + event.values[2]); 

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

roll: 2.265
roll: 2.265
roll: 2.265
roll: 1.843
roll: 2.265
roll: 2.265
roll: 2.75
roll: 2.265

Я также реализовал этот алгоритм, чтобы ограничить движение моего персонажа на экране, но этого недостаточно, и он серьезно ограничивает скорость и скорость реагирования движения персонажа относительно текущих данных броска (я хотел бы, чтобы расположение персонажа было как можно ближе к 1-1 в отношении крена, насколько это возможно).

public void onSensorChanged(SensorEvent event)
{
    if (event.sensor.getType() == Sensor.TYPE_ORIENTATION)
    {
    float newX = -(int)event.values[2] * CCDirector.sharedDirector().displaySize().width/10.0f + 
          CCDirector.sharedDirector().displaySize().width/2.0f;

            sam.updatePosition(newX);

    Log.e(TAG, "roll: " + event.values[2]);
     }
}

public void updatePosition(float newX)
{
    float winSizeX = CCDirector.sharedDirector().displaySize().width;
    float contentWidth = this.sprite.getContentSize().width;

    //tries to eliminate jumpy behaviour by the character by limiting his speed
    double tolerance = 0.01;
    if (Math.abs(newX - this.sprite.getPosition().x) > winSizeX * tolerance) 
        newX = this.sprite.getPosition().x - ((this.sprite.getPosition().x - newX) * 0.1f);

    this.sprite.setPosition(newX, this.sprite.getPosition().y);
}

Мне интересно, нормально ли это или это тестируемый телефон (Sony Xperia Play.)

Спасибо за любой вклад.

1 Ответ

0 голосов
/ 04 марта 2012

Как насчет скользящего среднего , чтобы сгладить ваши данные на лету?

Это будет немного отставать, но было бы незаметно.

С другой стороны, яне будет использовать углы Эйлера (например, рулон).

...