2014-12-07 2 views
0

Мне было интересно, какие датчики используются в гоночных играх в android.Датчики движения для гоночных игр в android

На самом деле мне нужно было измерить точный угол поворота на моем телефоне Android, но я узнал, что у моего мобильного телефона нет необходимых датчиков, таких как GRAVITY или MAGNETIC, и его API андроида - 17. На основании моих поисков в сети, я выясню, что невозможно измерить точный угол поворота без этих датчиков.

Так что мне было интересно, как гоночные игры работают в моем мобильном телефоне ??? В таких играх вы управляете автомобилем, поворачивая экран. Но как эти игры узнают о его вращении, когда у него нет необходимых датчиков !!!

Этот вопрос может показаться немного глупым, но я буду признателен, если кто-то ответит на него.

+0

возможно дубликат [Получить угол поворота Android в оси х] (http://stackoverflow.com/questions/12080170/get-android-rotation-angle-in-x-axis) Также проверьте это: http://www.reddit.com/r/androiddev/comments/1av1la/ –

+0

Дополнительные мысли: не думайте об абсолютных мерах вращение. Вам не нужно абсолютное, все, что вам нужно, это изменения из какого-то начального состояния и, возможно, корректировки по ходу дела. Для простого примера, скажем, вы кладете на свою сторону телефон в ландшафтной перспективе. Это ваша отправная точка, и все расчеты рулевого управления сделаны из этого начального состояния. Вещи становятся более интересными, если вы принимаете во внимание стоячие и т. Д., Но это всего лишь вопрос некоторой нечеткой математики и сброса вашего «базового» вращения. –

+0

Я проверил его и некоторые другие сообщения тоже. Это не работает. Я не знаю почему, но он дает неправильные значения угла поворота на каждой оси. Я проверил множество страниц, а также прочитал пару таких книг, как «Программирование датчиков Android-Book-Android, опубликованное Wrox». Говорят, что TYPE_ORIENTATION устарела. Для API 20 и более поздних версий TYPE_LINEAR_ACCELERATION дает вращение, а для других API - требуется GRAVITY или MAGNETIC. – Taher

ответ

0

Вы можете использовать акселерометр для проверки ориентации устройства по всем осям X, Y и Z. Вы не должны зависеть от GRAVITY и MAGNETIC, как вы сказали. См код ниже, может быть, это может помочь вам -

float[] rotationMatrix = new float[9]; 
if(SensorManager.getRotationMatrix(rotationMatrix, null, lastAcceleration, lastMagneticField)){ 
float[] orientMatrix = new float[3]; 
float remapMatrix = new float[9]; 
SensorManager.remapCoordinateSystem(rotationMatrix, SensorManager.AXIS_X, SensorManager.AXIS_Z, remapMatrix); 
SensorManager.getOrientation(remapMatrix, orientMatrix); 

orientation = orientMat[0]*180/(float)Math.PI; 

Приветствия :)

+0

Вы используете lastMagneticField, который получен из MAGNETIC !!! Итак, как вы предполагаете, что мне не нужна МАГНИТНАЯ !!! – Taher