Какова альтернатива датчику ориентации андроида?

Привет, я создаю 3D-игру для Android.

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

В идеале я хотел бы использовать датчик ORIENTATION, но я заметил, что он устарел. Кто-нибудь знает, как обнаружить наклон в андроиде и не использует этот датчик?

    Фактического «ориентировочного» датчика нет – это (фактически) составной датчик, созданный из комбинации акселерометра и магнометра.

    С http://developer.android.com/reference/android/hardware/SensorEvent.html

    «Этот тип датчика существует по устаревшим причинам, используйте getRotationMatrix () совместно с remapCoordinateSystem () и getOrientation (), чтобы вычислить эти значения».

    public class OrientationTestActivity extends Activity implements SensorEventListener { private SensorManager mSensorManager; private Sensor mAccelerometer; private Sensor mMagnetometer; private float[] mLastAccelerometer = new float[3]; private float[] mLastMagnetometer = new float[3]; private boolean mLastAccelerometerSet = false; private boolean mLastMagnetometerSet = false; private float[] mR = new float[9]; private float[] mOrientation = new float[3]; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); mMagnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); } protected void onResume() { super.onResume(); mLastAccelerometerSet = false; mLastMagnetometerSet = false; mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL); mSensorManager.registerListener(this, mMagnetometer, SensorManager.SENSOR_DELAY_NORMAL); } protected void onPause() { super.onPause(); mSensorManager.unregisterListener(this); } public void onAccuracyChanged(Sensor sensor, int accuracy) { } @Override public void onSensorChanged(SensorEvent event) { if (event.sensor == mAccelerometer) { System.arraycopy(event.values, 0, mLastAccelerometer, 0, event.values.length); mLastAccelerometerSet = true; } else if (event.sensor == mMagnetometer) { System.arraycopy(event.values, 0, mLastMagnetometer, 0, event.values.length); mLastMagnetometerSet = true; } if (mLastAccelerometerSet && mLastMagnetometerSet) { SensorManager.getRotationMatrix(mR, null, mLastAccelerometer, mLastMagnetometer); SensorManager.getOrientation(mR, mOrientation); Log.i("OrientationTestActivity", String.format("Orientation: %f, %f, %f", mOrientation[0], mOrientation[1], mOrientation[2])); } } } 
    Interesting Posts

    Страница X of Y

    Закругленные края в кнопке C # (WinForms)

    iPhone: обнаружение бездействия пользователя / время простоя с момента последнего касания экрана

    Как избежать использования сценариев на моей странице JSP?

    backtransform `scale ()` для построения графика

    Настройка Linksys WRT54G для использования DHCP-сервера модема

    Объяснение близости задачи Android

    Любой способ заставить строгий режим в узле?

    Пользовательский Drawable для ProgressBar / ProgressDialog

    Преобразование видео с 1080p в 720p с минимальной потерей качества при использовании ffmpeg

    Могу ли я восстановить Windows 8 / установить Windows 7 из BIOS?

    Что произойдет, если вы не совершаете транзакцию с базой данных (скажем, SQL Server)?

    Как преобразовать изображение в строку Base64?

    Каковы правила для токена «…» в контексте вариативных шаблонов?

    Windows 8 не будет установлена ​​на моем ПК через USB, но будет с моего ноутбука. Код ошибки: 0xC00000005

    Давайте будем гением компьютера.