Реализация игры на основе компаса - PullRequest
0 голосов
/ 11 апреля 2019

Я пытался реализовать простую 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, но вместо этого я получаю сбой ... Любая помощь очень ценится!:)

...