
GTSPORTで90度超えドリフトをする方法
スマートフォンをはじめとする最近のデバイスには、様々なセンサーが搭載されています。今回の記事ではジャイロスコープ、コンパス、加速度センサーのリアルタイム情報をJavaScriptで取得する方法を紹介します。これを使えば、コンパスアプリや水平機、傾けてボールを転がすゲームなどが作れるようになります。
デバイスの頭を基準にして方角の値(0~360)が取得されます。
・0 – 北
・90 – 西
・180 – 南
・270 – 東
スマホの方角を取得するサンプル
0:北
90:西
180:南
270:東
window.addEventListener('deviceorientation', function(event){ //デバイスの傾きや方角の値が変化したときに発火
document.getElementById('directions').innerHTML = event.alpha; // event.alphaで方角の値を取得
});
10行目の「deviceorientation」というイベント名は、デバイスの方角や傾きの値が変化したときに発火されます。小数点以下15桁という微小の変化で発火されるので、ほぼ止まることなく値が取得され続けることになります。
デバイスの上下方向の傾きの値を取得します。
・0 – 水平
・-90または90 – 垂直
スマホの上下方向の傾きを取得するサンプル
0:水平
-90または90:垂直
window.addEventListener('deviceorientation', function(event){ //デバイスの傾きや方角の値が変化したときに発火
document.getElementById('beta').innerHTML = event.beta; // event.betaで上下方向の傾きの値を取得
});
デバイスの左右方向の傾きの値を取得します。
・0 – 水平
・-90または90 – 垂直
スマホの左右方向の傾きを取得するサンプル
0:水平
-90または90:垂直
window.addEventListener('deviceorientation', function(event){ //デバイスの傾きや方角の値が変化したときに発火
document.getElementById('gamma').innerHTML = event.gamma; // event.gammaで左右方向の傾きの値を取得
});
デバイスを振ったときの加速度を取得します。
・x軸 – 上下方向
・y軸 – 左右方向
・z軸 – 前後方向
スマホの加速度を取得するサンプル
左右方向の加速度:
m/s2
上下方向の加速度:
m/s2
前後方向の加速度:
m/s2
左右方向の加速度:
m/s2
上下方向の加速度:
m/s2
前後方向の加速度:
m/s2
window.addEventListener('devicemotion', function(event){ //デバイスが動いたときに発火
//▼重力なし
if(event.acceleration.x>5) document.getElementById('accelerationX').innerHTML = event.acceleration.x; // event.acceleration.xで上下方向の加速度取得
if(event.acceleration.y>5) document.getElementById('accelerationY').innerHTML = event.acceleration.y; // event.acceleration.yで左右方向の加速度取得
if(event.acceleration.z>5) document.getElementById('accelerationZ').innerHTML = event.acceleration.z; // event.acceleration.zで前後方向の加速度取得
//▼重力あり
if(event.accelerationIncludingGravity.x>5) document.getElementById('accelerationIncludingGravityX').innerHTML = event.accelerationIncludingGravity.x; // event.accelerationIncludingGravity.xで上下方向の加速度取得
if(event.accelerationIncludingGravity.y>5) document.getElementById('accelerationIncludingGravityY').innerHTML = event.accelerationIncludingGravity.y; // event.accelerationIncludingGravity.yで左右方向の加速度取得
if(event.accelerationIncludingGravity.z>5) document.getElementById('accelerationIncludingGravityZ').innerHTML = event.accelerationIncludingGravity.z; // event.accelerationIncludingGravity.zで前後方向の加速度取得
});
重力ありの「accelerationIncludingGravity」では、物理の授業で習った重力加速度が加算されます。基本は9.8m/s2ですが、場所によって重力加速度は異なります。
デバイスを机に置いてみてください。一番下の「前後方向の加速度」の値がプルプルと震えているはずです。これがその場所の重力加速度ということになります(私が住んでいる石川県野々市市では10.01~10.06m/s2でした)。
デバイスを回転したときの速度を取得します。時計回りは正の値、反時計回りは負の値を取りますので、プログラミングの際は注意してください。
・alpha – 縦に起こしたり倒したりする方向
・beta – 横に起こしたり倒したりする方向
・gamma – 水平のまま回転する方向
デバイスの回転速度を取得するサンプル
縦に起こしたり倒したりする方向の回転速度:
deg/s
横に起こしたり倒したりする方向の回転速度:
deg/s
水平のまま回転する方向の回転速度:
deg/s
window.addEventListener('devicemotion', function(event){
if(event.rotationRate.alpha>5) document.getElementById('rotationRateAlpha').innerHTML = event.rotationRate.alpha; //event.rotationRate.alphaで縦方向の回転速度取得
if(event.rotationRate.beta>5) document.getElementById('rotationRateBeta').innerHTML = event.rotationRate.beta; //event.rotationRate.betaで横方向の回転速度取得
if(event.rotationRate.gamma>5) document.getElementById('rotationRateGamma').innerHTML = event.rotationRate.gamma; //event.rotationRate.gammaで水平方向の回転速度取得
});