1

私はアンドロイドにセンサーandengineを実装するために使用しています。accelerometer私の要件は、加速度計を使用してボールを画面の中央に移動する必要があることです。デバイスが平らな位置にあるときにそれを達成できます。これは、AndEngineライブラリ内の計算に X および Y の加速度値を使用するためです。

しかし、デバイスをまっすぐに立てたときに問題が発生します。オブジェクトは中央に移動せず、常に画面の下部バーに配置されます。ただし、この時点で z 値を計算し、ロジックをAccelerationDataクラスに挿入して、y の代わりに z 値を使用しようとしました。しかし、成功しません。次のコードを調べて、私が何をしているのか教えてください。

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 値の使用法を示しています。どんな助けでも大歓迎です。

4

0 に答える 0