我一直在尝试使用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中产生一个旋转的矩形,但是我却崩溃了...非常感谢您的帮助! :)