Accelerometer (加速度センサー) クラスの続き

Accelerometer クラスの続きです。今回は少し細かい点をいくつか。

Accelerometer.muted

まず、デバイスによって、アプリケーションからの加速度センサー利用の許可/不許可を切り替えられるものがあるようです。その場合、Accelerometer.isSupported の値が true でも、加速度センサーが利用できない!という状況が起きる可能性があります。

そこで Accelerometer には muted という属性が用意されています。Accelerometer.muted の値が false であれば加速度センサーの使用が許可されている、true であれば拒否されている、という意味です。

アプリケーション実行中に Accelerometer.muted の値が変更された場合には status イベントが発行されることになっています。加速度センサーの状態の変更を検知したい場合は、staus イベントのハンドラを Accelerometer のインスタンスに追加しましょう。Accelerometer が常に利用可能なデバイスでは status イベントが一切発行されないという状況もあるかもですが。

加速度情報更新のタイミング

Flash アプリケーションは AccelerometerEvent.UPDATE イベントを通じて加速度センサーからの更新情報を知ることができます。では、いつ AccelerometerEvent.UPDATE イベントが発生するのか?というと、以下の 3 つの状況になったときだそうです。

  • Accelerometer のインスタンスに新しいリスナー関数が追加された (その際、全ての登録されたリスナー関数にイベントが渡される)
  • デバイスの加速度センサーから更新情報が (ある一定の間隔で) 渡された
  • Flash アプリケーションが Accelerometer から更新を受け取れない状態から復帰した (例:一時的にアイドル状態になっていた)

通常、デバイスは、予めデバイスに設定されている間隔で加速度情報の更新をアプリケーションに伝えます。そのため、一般的には、アプリケーションがイベントを受け取る間隔はデバイスに依存します。

この間隔を調整したい場合、Accelerometer のインスタンスに対して setRequestedUpdateInterval() メソッドを使用することで間隔を指定することができます。setRequestedUpdateInterval() の引数には、ミリ秒単位で更新間隔を指定します。

var accl:Accelerometer;
accl = new Accelerometer();
// 1秒間隔でUPDATEイベントが発生するよう指定する
accl.setRequestedUpdateInterval(1000);
 

setRequestedUpdateInterval() を使って設定された間隔は、登録されている全てのリスナーに対して有効になります。加速度情報の更新間隔は、setRequestedUpdateInterval() で指定したものにほぼなるのですが、多少のぶれはあるようです。

誤差について

加速度センサーの計測値には多少の誤差が含まれています。

そのため、測定の間隔はあまり空けずに、サンプル値を多めにとるのがよいと思われます。また、急に加速度の値が飛んだりしないよう、測定値をまるめる処理が適切な場合もあるかもしれません。

下は、前回までの測定値を使って、測定値を補正するサンプルです。このようにデータ補正を行うときは、測定間隔を短めにするのが良いでしょう。

var rollingX:Number = 0;
var rollingY:Number = 0;
var rollingZ:Number = 0;
const FACTOR:Number = 0.5;
 
function accelRollingAvg(eve:AccelerometerEvent):void
{
  rollingX = (eve.accelerationX * FACTOR) + (rollingX * (1 - FACTOR));
  rollingY = (eve.accelerationY * FACTOR) + (rollingY * (1 - FACTOR));
  rollingZ = (eve.accelerationZ * FACTOR) + (rollingZ * (1 - FACTOR));
}
 

 

トラックバック(0)

トラックバックURL: http://cuaoar.jp/mt4/mt-tb.cgi/80

コメントする

2014年1月

Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
レンタルサーバー

月別 アーカイブ

Powered by Movable Type 4.261