2016-04-25 8 views
-1

Я развиваю гоночную игру. Машина движется сама по себе в прямом направлении. Только 2 управления предоставляются пользователю:Android: линейное ускорение без замедления

  • Когда игрок перемещает свое устройство вправо, я имею в виду линейное перемещение устройства, автомобиль будет повернуть направо.

  • То же самое касается поворота влево.

Я использую для этой цели Sensor.TYPE_LINEAR_ACCELERATION. проблема является:

  • Когда я переместить устройство вправо, автомобиль движется вправо, а затем возвращается в исходное положение.

Я думаю это потому, что когда я начинаю перемещать устройство, есть некоторое положительное ускорение, так что автомобиль поворачивает направо. Но когда устройство останавливается, происходит некоторое отрицательное ускорение (замедление), которое заставляет автомобиль поворачивать налево.

Как я могу достичь того, чего хочу?

+0

использует гироскоп для определения ориентации вместо ускорения. – njzk2

+0

Я не хочу вращательного движения. Я хочу линейное движение. Движение устройства сбоку в сторону при сохранении его плоской. –

+0

не может этого сделать. вы не можете различать постоянную скорость и скорость (потому что это постоянная скорость в конце концов) (все игры в слове используют ротацию, хотя, почему бы и нет?) – njzk2

ответ

1

Я не работал с Sensors на Android, но ускорение должно быть отрицательным, поскольку устройство останавливается. Ваш код должен учитывать это на основе интервала времени между каждым SensorEvent:

private long previousTimestamp = 0; 

private double velocity = 0; 

public double getDistance(float acceleration, long timestamp) { 
    double time = (timestamp - previousTimestamp)/1E9; 
    previousTimestamp = timestamp; 

    double distance = (velocity * time) + (0.5 * (acceleration * (time * time))); 
    velocity += acceleration * time; 

    return distance; 
} 
+0

Можете ли вы немного объяснить, как я могу использовать это расстояние до карты на мой автомобиль? –

+0

Я получаю абсолютно случайные значения расстояния каждый раз. –

+0

@SalmanYounas Должно быть изменение расстояния. Итак, если вы работаете вдоль оси x, вы должны просто добавить эти значения в положение автомобиля вдоль этой оси ('position + = distance'). Хотя, это должны быть реальные расстояния, поэтому вы можете уменьшить их для использования в своей игре (то есть «position + = (distance * scalefactor)»). – Bryan

Смежные вопросы