我两天前在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得到分数。
大多数智能手机加速度计和陀螺仪没有完全相同的传感器,显然每个设备之间的数据会略有不同。
你还没有说明你是如何计算分数的。我会对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。
最后,对于不同的智能手机,显示出不同的结果,因为用户通常在晃动智能手机时达到最大值。