基于指南针实现游戏

时间:2019-04-11 13:18:09

标签: java android andengine

我一直在尝试使用andEngine实现基本的2D射击游戏。目标是在给定的位置射击敌人,目标是基于玩家可以旋转360度的“指南针”。问题在于使SensorListener侦听电话的传感器,然后计算Sprite可以将旋转改变为的角度。

可以设置精灵的旋转,但是不能将数据从传感器获取到设置旋转的方法。

我的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);
    }

场景是对GameScene的引用,该GameScene将图像输出到屏幕。在GameScene中,mAzimuth属性是从传感器设置的。 Ship中的moveShip方法仅将子画面旋转设置为mAzimuth。

这应该在我的GameScene中产生一个旋转的矩形,但是我却崩溃了...非常感谢您的帮助! :)

0 个答案:

没有答案