我两天前在Google Play商店发布了一款使用运动传感器的游戏。这个游戏是一个拳击手游戏,并允许用户在他们摇动智能手机得分时将自动评估。要评估分数,它使用 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
//.......
//........
}
}
我可以分享我的应用程序链接,但是允许吗?如果是,请说。我可以分享我的申请链接。
注意:我想解释我的算法,得到分数我从传感器获得最大加速度并保持变量的最大值。用户点击show score按钮后,我乘以40得到分数。
答案 0 :(得分:1)
我不明白你的问题。 Type_Linear_Acceleration是一个虚拟传感器,它从加速度计和陀螺仪的数据组合中获取数据。
大多数智能手机加速度计和陀螺仪没有完全相同的传感器,显然每台设备之间的数据会略有不同。
答案 1 :(得分:1)
你的天堂没有描述你如何计算分数。 我会对3维进行平方根计算,然后使用结果(磁性)作为分数
score = getMagnetude(values);
和功能:
private float getMagnetude(float[] v) {
return Math.sqrt( v[0]*v[0] + v[1]*v[1] + v[2]*v[2] );
}
答案 2 :(得分:-1)
我理解我的问题。我正在使用 Sensor.TYPE_LINEAR_ACCELERATION ,因此它使用陀螺仪+加速计传感器。
TYPE_LINEAR_ACCELERATION传感器的操作逻辑是什么?
它使用加速度计和陀螺仪传感器。它有一个公式:
线性加速度= k1 x加速度计+ k2 xgyroscope
k1和k2是常数值。
对于陀螺仪,没有任何最大值(我认为),但对于加速计传感器,不同的智能手机使用不同的最大值。
这些最大值为 - + g(9.8), - + 2g, - + 4g和 - + 8g。
最后,对于不同的智能手机,会显示不同的结果,因为用户通常在摇动智能手机时达到最大值。