モバイル デバイス (Cordova アプリ) でセンサーを使用して、物理エンジンの動作を変更する方法を探しています。現在PhysicsJSをいじっていますが、物理エンジンの候補としてmatter.jsも見つけました。
最初のステップでは、エンジンの重力を変更して、デバイスの y 方向ではなく、デバイスの回転方法に応じた「実際の」方向を使用するようにします。後で (オプションで) z 方向も物理エンジンの世界を変更するために使用できます。
誰でもヒントや例を教えてもらえますか?
- 読み取るセンサー(方向、加速度計、ジャイロ、重力など)。まともなスマートフォン/ブラウザに統合された HTML5 サポートはありますか、それとも Cordova プラグインを追加する方が良いですか?
- モバイル デバイスの新しい位置を反映するために物理エンジンに適用する変更
環境: Cordova、Ionic、HTML5、Android >= Kitkat、iOS >= 7
これまでの私自身の発見:
私のdeviceorientation
要件に最も適したイベントだと思います。非常に未加工の実装 (満足のいくものではありません) は次のとおりです。
var acceleration = Physics.behavior('constant-acceleration')
.setAcceleration({x: 0, y: GRAVITY * options.gravityFactor});
world.add([acceleration]);
if (window.DeviceOrientationEvent) {
var deviceOrientationHandler = function (event) {
world.one('step', function () {
acceleration.setAcceleration({
x: (90 / event.gamma) * GRAVITY,
y: (90 / event.beta) * GRAVITY
});
});
};
window.addEventListener('deviceorientation',
deviceOrientationHandler, false);
}
x、y に関するデバイスの角度を計算し、重力ベクトルを x 部分と y 部分に分割する方が良いオプションのようです。多分それはさらに複雑です。これは私には多くの数学のように聞こえます。確かに何百人、何千人もがすでにこれを行っているので、私を助けてくれませんか?
したがって、今残っているより具体的な質問は次のとおりです。
2D物理エンジンでDeviceOrientationEventベータとガンマを重力に変換する方法は?