2016-09-26 3 views
-1

Я опубликовал игру, в которой два дня назад в Google Play Store была установлена ​​система датчиков движения. Эта игра - игра в боксер и позволяет пользователям, когда они потрясают оценку смартфона, будет оцениваться автоматически. Для оценки оценки используется TYPE_LINEAR_ACCELERATION датчик.TYPE_LINEAR_ACCELERATION Значения датчиков изменяются в соответствии с брендом смартфона

Но проблема в том, что после публикации игры некоторые пользователи отправляют свой счет. Я видел, что для некоторых смартфонов легко получить 900 очков, когда для некоторых смартфонов трудно получить 500 очков. Я имею в виду, что если один и тот же пользователь встряхивает (с той же силой) разные телефоны в этой игре; для X смартфона он получает (например) 400 точек, для Y смартфона получается (например) 850 баллов.

Почему возникает это неравенство?

Я понял (а), что некоторые смартфоны оценивают счет меньше, когда некоторые смартфоны оценивают больше.

Мой implentation (примерно)

sensorManager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE); 
    sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION), SensorManager.SENSOR_DELAY_FASTEST); 

-

@Override 
     public void onSensorChanged(SensorEvent event) { 
      if (event.sensor.getType() == Sensor.TYPE_LINEAR_ACCELERATION) { 
       float[] values = event.values; 
       float x = values[0];//to get X - axis acceleration 
        //....... 

       //........ 
    } 
    } 

Я могу поделиться ссылкой приложений, но это разрешено? Если да, скажите. Я могу поделиться ссылкой на приложение.

Примечание: Я хочу объяснить свой алгоритм, чтобы получить оценку. Я получаю максимальное ускорение от датчика и сохраняю максимальное значение в переменной. после того, как пользователь нажмет кнопку «Показать счет», я умножу на 40 и получаю счет.

+1

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

+0

Лучший подход для этого вопроса. – user119949

+0

Кто скажет, что у них будут разные максимумы? Есть ли какая-либо граница для датчика ускорения для разных телефонов? – user119949

ответ

1

Я не понимаю ваш вопрос. Type_Linear_Acceleration - это виртуальный датчик, который получает свои данные из комбинации данных с акселерометра и гироскопа.

Большинство акселерометров и гироскопов для смартфонов не имеют точно такого же датчика, и, очевидно, данные будут немного отличаться между каждым устройством.

+0

С научной точки зрения, я думаю, что они должны быть ТО ЖЕ. Зачем? Я думаю, все они должны быть мгновенным ускорением. Наука показывает, что объекты имеют (только ОДИН) ускорение в одно мгновение, как скорость. Тогда почему разные телефоны показывают разные результаты? (Я не имею в виду чувствительность, возможно, они будут разными) Мой вопрос прост, если мы применим ту же силу (в том же направлении) к 2 различным смартфонам, почему их оценка отличается? Эта разница иногда может быть в 3 раза больше. – user119949

+0

F = m.a, пожалуйста, предположите, что их M одинаково (масса.) – user119949

+0

Когда я говорил SAME, я имею в виду, что они должны показывать результаты NEAR. Например, «предположим, что 1-й телефон показывает 512, 2-й показывает 530», этот результат ожидается. Но для разных телефонов существует огромная разница. Это различие иногда может быть в 3 раза больше (примерно). Я тестировал. – user119949

1

Вы не описали, как вы рассчитываете счет. Я хотел бы сделать квадратный корень из расчета 3 размеров, а затем использовать результат (magnetude) как оценка

score = getMagnetude(values); 

и функции:

private float getMagnetude(float[] v) { 
     return Math.sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); 
} 
+0

Этот вопрос не о том, как рассчитать, я рассчитываю, используя только 1 направление (ось X). Это не проблема. Мой вопрос: «Почему разные телефоны не показывают результаты NEAR?» «Почему разница может быть огромной? Для такого же ускорения», я протестировал. Фактически, я могу поделиться ссылкой на приложение, если это не запрещено. – user119949

-1

я понял мою проблему. Я использую Sensor.TYPE_LINEAR_ACCELERATION, поэтому он использует датчик гироскопа + акселерометра.

Какова операционная логика датчика TYPE_LINEAR_ACCELERATION?

Он использует акселерометр и гироскоп sensor.It имеют формулу, что:

линейное ускорение = k1 х акселерометром + k2 xgyroscope

k1 и k2 это постоянные значения.

Для гироскопа нет никакого значения (я думаю), но для датчика акселерометра у другого смартфона используется другое максимальное значение.

Эти максимальные значения: - + g (9.8), - + 2g, - + 4g и - + 8g.

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

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