Как люди создают игры, которые заставляют объект двигаться, когда мы поворачиваем или вращаем наш телефон в разных направлениях (например, ускоряя автомобиль)? Они используют показания акселерометра и гироскопа или используют OpenGL в Android?
Как датчики используются в играх для Android?
comment
Они используют показания датчиков, чтобы контролировать все, что они используют для рисования, будь то 2D, 3D и т. д.
- person Dave Newton   schedule 06.11.2011
Ответы (2)
Скорее всего, они используют акселерометр, потому что он широко доступен на самых разных устройствах.
Возможно, вы захотите взглянуть на это руководство: http://blog.androgames.net/85/android-accelerometer-tutorial/
А вот демонстрация функции акселерометра от Google: http://developer.android.com/resources/samples/AccelerometerPlay/src/com/example/android/accelerometerplay/AccelerometerPlayActivity.html
person
user1032613
schedule
06.11.2011
Спасибо, пользователь 1032613... это хороший пример... но оооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо.
- person Kozlov; 07.11.2011
Привет, я пытался понять код в образце. Там много математики, и более того, много жесткого кодирования используется без каких-либо комментариев. Есть ли кто-нибудь, кто хорошо понимает этот код? И @user1032613 это именно то, что я искал :)
- person Kozlov; 09.11.2011
В этом примере показано простое вычисление для трех направлений: шаг, ориентация и азимут.
if(SensorManager.getRotationMatrix(R, null, AccelerometerValues_last, MagneticFieldValues_last))
{
SensorManager.remapCoordinateSystem(R, SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X, remapR);
SensorManager.getOrientation(remapR, orientationValues);
Matrix.multiplyMV(orientationVector, 0, remapR, 0, sZVector, 0);
pitch = (float) (-Math.atan2(orientationVector[1], orientationVector[2]) * RADIANS_TO_DEGREES);
Matrix.multiplyMV(orientationVector, 0, remapR, 0, sZVector, 0);
orientation = (float) (-Math.atan2(orientationVector[0], orientationVector[1]) * RADIANS_TO_DEGREES);
Matrix.invertM(remapR_inv, 0, remapR, 0);
Matrix.multiplyMV(azimuthVector, 0, remapR_inv, 0, sZVector, 0);
azimuth = (float) (180 + Math.atan2(azimuthVector[0], azimuthVector[1]) * RADIANS_TO_DEGREES);
}
Полный код в статье Как использовать сенсоры Android?< /а>. к вашему сведению.
person
user1553112
schedule
08.08.2012