加速度センサーを使用するには、Accelerometer オブジェクトをインスタンス化し、送出する
update
イベントに登録する必要があります。
update
イベントは、加速度センサーイベントオブジェクトです。このイベントには 4 つのプロパティがあり、それぞれ数値を表します。
-
accelerationX
- X 軸方向の加速度。単位は G。デバイスが直立状態にある場合、X 軸はデバイスの左から右へ伸びます(デバイスの上部が上を向いている場合がデバイスの直立状態です)。デバイスが右方向に移動する場合、加速度は正の値になります。
-
accelerationY
- Y 軸方向の加速度。単位は G。デバイスが直立状態にある場合は、Y 軸はデバイスの下から上へ伸びます(デバイスの上部が上を向いている場合がデバイスの直立状態です)。デバイスがこの軸を基準にして上方向に移動する場合、加速度は正の値になります。
-
accelerationZ
- Z 軸方向の加速度。単位は G。Z 軸はデバイス面の垂直方向に伸びます。デバイスの画面が上を向くように移動する場合、加速度は正の値になります。デバイスの画面が地面に向いている場合、加速度は負の値になります。
-
timestamp
—ランタイムが初期化されてからイベント発生時までの時間(ミリ秒)です。
1 G は引力に起因する標準加速度で、約 9.8 m/sec
2
です。
以下に、テキストフィールドに加速度センサーのデータを表示する基本例を示します。
var accl:Accelerometer;
if (Accelerometer.isSupported)
{
accl = new Accelerometer();
accl.addEventListener(AccelerometerEvent.UPDATE, updateHandler);
}
else
{
accTextField.text = "Accelerometer feature not supported";
}
function updateHandler(evt:AccelerometerEvent):void
{
accTextField.text = "acceleration X: " + evt.accelerationX.toString() + "\n"
+ "acceleration Y: " + evt.accelerationY.toString() + "\n"
+ "acceleration Z: " + evt.accelerationZ.toString()
}
この例を使用するには、このコードを実行する前に
accTextField
テキストフィールドを作成し、表示リストに追加する必要があります。
Accelerometer オブジェクトの
setRequestedUpdateInterval()
メソッドを呼び出すことにより、加速度センサーイベントの間隔を必要に応じて調整できます。このメソッドは 1 つのパラメーター
interval
を受け取ります。これは、必要な更新間隔(ミリ秒単位)です。
var accl:Accelerometer;
accl = new Accelerometer();
accl.setRequestedUpdateInterval(1000);
加速度センサーの実際の更新間隔は、この値よりも大きかったり小さかったりする可能性があります。更新間隔が変更された場合、登録されたリスナーすべてに影響します。
setRequestedUpdateInterval()
メソッドを呼び出さない場合、アプリケーションはデバイスのデフォルトの間隔に基づいて更新を受け取ります。
加速度センサーのデータには、ある程度の誤差が生じます。最近のデータの移動平均を使用して、データを平均化することができます。例えば、次の例では、加速度センサーの最近の測定値に現在の測定値を取り込み、平均値を算出します。
var accl:Accelerometer;
var rollingX:Number = 0;
var rollingY:Number = 0;
var rollingZ:Number = 0;
const FACTOR:Number = 0.25;
if (Accelerometer.isSupported)
{
accl = new Accelerometer();
accl.setRequestedUpdateInterval(200);
accl.addEventListener(AccelerometerEvent.UPDATE, updateHandler);
}
else
{
accTextField.text = "Accelerometer feature not supported";
}
function updateHandler(event:AccelerometerEvent):void
{
accelRollingAvg(event);
accTextField.text = rollingX + "\n" + rollingY + "\n" + rollingZ + "\n";
}
function accelRollingAvg(event:AccelerometerEvent):void
{
rollingX = (event.accelerationX * FACTOR) + (rollingX * (1 - FACTOR));
rollingY = (event.accelerationY * FACTOR) + (rollingY * (1 - FACTOR));
rollingZ = (event.accelerationZ * FACTOR) + (rollingZ * (1 - FACTOR));
}
ただし、この移動平均は、加速度センサーの更新間隔が短い場合にのみ有効です。