Я пытался реализовать простую 2d шутер с использованием andEngine.Цель состоит в том, чтобы стрелять по врагам в определенных местах, где цель основана на «компасе», где игрок может вращаться на 360 градусов.Проблема заключается в создании SensorListener, который прослушивает датчик телефона, а затем вычисляет угол, на который спрайт может изменить вращение.
Настройка вращения спрайта работает, но получение данных от датчиков в метод, который устанавливает вращение, не работает.
Мой onSensorChanged выглядит следующим образом:
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {
SensorManager.getRotationMatrixFromVector(rMat, event.values);
mAzimuth = (int) (Math.toDegrees(SensorManager.getOrientation(rMat, orientation)[0]) + 360) % 360;
}
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
System.arraycopy(event.values, 0, mLastAccelerometer, 0, event.values.length);
mLastAccelerometerSet = true;
} else if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
System.arraycopy(event.values, 0, mLastMagnetometer, 0, event.values.length);
mLastMagnetometerSet = true;
}
if (mLastAccelerometerSet && mLastMagnetometerSet) {
SensorManager.getRotationMatrix(rMat, null, mLastAccelerometer, mLastMagnetometer);
SensorManager.getOrientation(rMat, orientation);
mAzimuth = (int) (Math.toDegrees(SensorManager.getOrientation(rMat, orientation)[0]) + 360) % 360;
}
scene.mAzimuth = Math.round(mAzimuth);
ship.moveShip(-mAzimuth);
}
Scene - это ссылка на GameScene, которая выводит изображение на экран.В GameScene атрибут mAzimuth атрибут устанавливается с датчиков.Метод moveShip в Ship просто устанавливает вращение спрайта в mAzimuth.
Это должно привести к вращающемуся прямоугольнику в моей GameScene, но вместо этого я получаю сбой ... Любая помощь очень ценится!:)