Box2D を使用してツールを作成しており、モバイル デバイスに作用する実際の重力の方向を一致させる方法があるかどうかを確認したいと考えていました。
devicemotion イベントにバインドすることで、これを iPad で完全に動作させることができました。ユーザーがデバイスを横向きまたは縦向きモードで保持しているかどうかを判断するために、ウィンドウの幅が高さよりも大きいかどうかを確認し、その事実に基づいて加速度計が提供するデータを変換します。たとえば、iPad がホーム ボタンをデバイスの下部に向けて保持されている場合、予想どおり、y は負であり、重力に対応します。デバイスを左右に 90 度回転させると、y は 0 に向かって移動し、x は 9.8 に増加するか、-9.8 に減少します。
問題は、向きがデフォルトで横向きになっている Android デバイスに移動すると (つまり、デバイスのハードウェアが、主に横向きで使用することを意図していることが明確になるように配置されている)、x 座標と y 座標が逆になることです。また、ウィンドウの高さが幅よりも大きいという事実は、ユーザーがデバイスの上部を「上」に、下部を「下」にして保持しているかどうかを判断するために使用できません。
デバイスが保持されている方向を判断し、その結果、重力が常に地球に対して相対的になるように加速度計のデータを解釈する方法を知るためのより普遍的な方法はありますか?
プロパティ値を決定するために使用しているメソッドの簡単な抜粋を次に示します。
window.addEventListener('devicemotion', function(e) {
console.log(e.accelerationIncludingGravity.x);
console.log(e.accelerationIncludingGravity.y);
})