TYPE_LINEAR_ACCELERATION传感器值根据智能手机品牌型号变化



我两天前在Google Play Store发布了一款使用动作传感器的游戏。这款游戏是一款拳击手游戏,允许用户在摇动智能手机时自动评估分数。为了评估分数,它使用TYPE_LINEAR_ACCELERATION传感器。

但问题是在我发布游戏后,一些用户发送了他们的分数。我发现有些智能手机很容易获得900分,而有些智能手机却很难获得500分。我的意思是,如果同一个用户在这个游戏中用同样的力量摇动不同的手机;例如,他在X智能手机上得到400分,在Y智能手机上得到850分。

为什么会出现这种不平等?

我明白(猜),有些智能手机评估得分较低,而有些智能手机评估得分较高。

我的实现(大致)

    sensorManager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE);
    sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION), SensorManager.SENSOR_DELAY_FASTEST);

@Override
        public void onSensorChanged(SensorEvent event) {
            if (event.sensor.getType() == Sensor.TYPE_LINEAR_ACCELERATION) {
                float[] values = event.values;
                 float x = values[0];//to get X - axis acceleration   
                  //.......
                 //........
    }
    }

我可以分享我的应用程序链接,但是允许吗?如果是,请说。我可以分享我的应用程序链接。

注:我想解释我的算法,得到分数我得到最大加速度从传感器和保持最大值在一个变量。在用户点击显示分数按钮后,我乘以40得到分数。

我不明白你的问题。Type_Linear_Acceleration是一个虚拟传感器,它从加速度计和陀螺仪的数据组合中获取数据。

大多数智能手机加速度计和陀螺仪没有完全相同的传感器,显然每个设备之间的数据会略有不同。

你还没有说明你是如何计算分数的。我会对3个维度进行平方根计算,然后使用结果(磁力)作为分数

score = getMagnetude(values);

和功能:

private float getMagnetude(float[] v) {
        return Math.sqrt( v[0]*v[0] + v[1]*v[1] + v[2]*v[2] );
}

我明白我的问题了。我使用的是传感器。TYPE_LINEAR_ACCELERATION所以它使用陀螺仪+加速度计传感器。

TYPE_LINEAR_ACCELERATION传感器的操作逻辑是什么?

使用加速度计和陀螺仪传感器。它有一个公式:

线加速度= k1 x加速度计+ k2 x陀螺仪

k1和k2为常数。

对于陀螺仪,没有任何最大值(我认为)值,但对于加速度计传感器,不同的智能手机使用不同的最大值。

这些最大值为-+g(9.8), -+2g, -+4g和-+8g。

最后,对于不同的智能手机,显示出不同的结果,因为用户通常在晃动智能手机时达到最大值。

最新更新