如何在加速度计android中使用z轴值?

时间:2013-06-20 09:13:43

标签: android andengine accelerometer

我正在使用andengine在android中实现accelerometer传感器。我的要求是我必须使用加速度计将球移动到屏幕的中心。当设备处于平躺位置时,我能够实现这一点。因为它在AndEngine库中使用X和Y加速度值进行计算。

但是当我将设备保持在直立状态时会出现问题。对象不会移动到中心,它总是放在屏幕的底部栏。但是,我试图在此时计算z值并将我的逻辑注入AccelerationData类以使用z值而不是y。但没有成功。请仔细阅读以下代码并指导我做错了什么。

AccelerationData.java

public class AccelerationData extends BaseSensorData {
// ===========================================================
// Constants
// ===========================================================

private static final IAxisSwap AXISSWAPS[] = new IAxisSwap[4];

static {
    AXISSWAPS[Surface.ROTATION_0] = new IAxisSwap() {
        @Override
        public void swapAxis(final float[] pValues) {
            final float x = -pValues[SensorManager.DATA_X];
            final float y;
            if(SensorManager.DATA_Z > -0.50 && SensorManager.DATA_Z <0.50){
                y = pValues[SensorManager.DATA_Z];
            }else{
                y = pValues[SensorManager.DATA_Y];
            }
            pValues[SensorManager.DATA_X] = x;
            pValues[SensorManager.DATA_Y] = y;
        }
    };

    AXISSWAPS[Surface.ROTATION_90] = new IAxisSwap() {
        @Override
        public void swapAxis(final float[] pValues) {
            final float x = pValues[SensorManager.DATA_Y];
            final float y = pValues[SensorManager.DATA_X];
            pValues[SensorManager.DATA_X] = x;
            pValues[SensorManager.DATA_Y] = y;
        }
    };

    AXISSWAPS[Surface.ROTATION_180] = new IAxisSwap() {
        @Override
        public void swapAxis(final float[] pValues) {
            final float x = pValues[SensorManager.DATA_X];
            final float y = -pValues[SensorManager.DATA_Y];
            pValues[SensorManager.DATA_X] = x;
            pValues[SensorManager.DATA_Y] = y;
        }
    };

    AXISSWAPS[Surface.ROTATION_270] = new IAxisSwap() {
        @Override
        public void swapAxis(final float[] pValues) {
            final float x = -pValues[SensorManager.DATA_Y];
            final float y = -pValues[SensorManager.DATA_X];
            pValues[SensorManager.DATA_X] = x;
            pValues[SensorManager.DATA_Y] = y;
        }
    };
}
...
...
}    

这里我只在设备处于0度时显示z值的用法。任何帮助将不胜感激。

0 个答案:

没有答案