2016-09-26 10 views
-1

2日前にGoogle Playストアでモーションセンサーを使用したゲームを公開しました。このゲームはボクサーゲームであり、ユーザーがスマートフォンのスコアを振ると自動的に評価されます。スコアを評価するには、TYPE_LINEAR_ACCELERATIONセンサーを使用します。TYPE_LINEAR_ACCELERATIONスマートフォンブランドに応じてセンサー値が変更される

しかし、問題は私がゲームを公開した後、ユーザーの一部がスコアを送信します。私はいくつかのスマートフォンでは、スマートフォンの中には500ポイントを得るのが難しい場合は900ポイントを得るのは簡単だと分かりました。私は、同じユーザーがこのゲームで(同じ力で)異なる電話を振ると、そのことを意味します。 Xスマートフォンでは400ポイント、Yスマートフォンでは850ポイントなどが得られます。

なぜこの不等式が発生するのですか?

スマートフォンの中には、スコアを評価するスマートフォンがいくつかあると評価された(推測する)ものがあります。

マイimplentation(おおよそ)

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を掛けてスコアを得る。

+1

これらの携帯電話はそれぞれ異なるセンサーを使用しているため、遅延、リンギング動作、感度などが異なります。特に、最大値が異なります。加速度計が加速するまでには最大値、より低い値でセンサーをキャッピングした可能性があります。 –

+0

この質問のための最良のアプローチ。 – user119949

+0

誰が最大限違うと言いますか?異なる携帯電話用の加速度センサーの境界線はありますか? – user119949

答えて

1

私はあなたの質問を理解していません。 Type_Linear_Accelerationは、加速度センサーとジャイロスコープのデータの組み合わせからデータを取得する仮想センサーです。

ほとんどのスマートフォンの加速度計とジャイロスコープは、全く同じセンサーを備えていません。明らかに、データはデバイスごとに若干異なります。

+0

科学的な観点から、彼らは同じであるべきだと思います。どうして?私は、それらのすべてが即刻の加速であるべきだと思います。科学的には、オブジェクトは(1つの)加速を瞬時のように瞬時に持ちます。それでは、異なる電話機で異なる結果が表示されるのはなぜですか? (私は感受性を意味しない、おそらく彼らは異なっている) 2つの異なるスマートフォンに同じ力を(同じ方向に)適用すると、私の質問は簡単ですなぜ彼らのスコアが違うのですか? この違いは3倍大きくなることがあります。 – user119949

+0

F = m.a彼らのMは同じであると仮定してください(質量) – user119949

+0

私は同じことを言っていたとき、私は彼らがNEARの結果を示すべきであることを意味します。たとえば、「1台目の電話機に512が表示され、2台目に530が表示されているとします。しかし、さまざまな携帯電話には大きな違いがあります。 この違いは3倍大きくなることがあります(おおよそ)。私はテストしました。 – user119949

1

スコアの計算方法については説明していません。 は、私は3次元の平方根の計算を行い、その後、スコア

score = getMagnetude(values); 

と関数として結果(magnetude)を使用します。

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

この質問は計算方法に関するものではなく、ちょうど1方向(X軸)を使用して計算しています。それは問題ではない。私の質問は、「どうして別の電話機でNEAR結果が表示されないのですか? 「なぜ同じ差があるのでしょうか?私がテストしたのは同じ加速です。事実、禁止されていなければ、私のアプリケーションリンクを共有することができます。 – user119949

-1

私は私の問題を理解していました。私はSensor.TYPE_LINEAR_ACCELERATIONを使用していますので、Gyroscope + Accelerometerセンサーを使用しています。

TYPE_LINEAR_ACCELERATIONセンサーの動作ロジックは何ですか?

線形加速度= K1のX加速度計+ K2のxgyroscope

K1、K2は定数値である。

それは、式sensor.It加速度計とジャイロスコープを使用します。

ジャイロスコープの場合、最大値はありませんが、加速度センサーの場合、異なるスマートフォンでは最大値が異なります。

これらの最大値は、 - + g(9.8)、 - + 2g、 - + 4g、 - + 8gです。

最後に、異なるスマートフォンの場合、ユーザーは通常がスマートフォンを振ると最大値に達するため、異なる結果が表示されます。

関連する問題