Accelerometer クラス
flash.events:EventDispatcher
Accelerometer クラスは、デバイスのモーションセンサーによって検出されたアクティビティに基づいてイベントを送出します。このデータは、デバイスの位置または 3D 軸に沿った移動を表します。デバイスが移動したとき、センサーはこの移動を検出し、アクセラレーションデータを返します。Accelerometer クラスは、加速度センサーがサポートされているかどうかを照会するメソッドを提供します。また、加速度センサーイベントが送出される頻度を設定するメソッドも提供します。
注意:Accelerometer.isSupported プロパティを使用して、この機能を使用できるかどうかランタイム環境をテストします。Accelerometer クラスとそのメンバーは各 API エントリにリストされたランタイムバージョンにアクセスできますが、ランタイム用の現在の環境によって、この機能が使用できるかどうかが決まります。例えば、Flash Player 10.1 の Accelerometer クラスのプロパティを使用してコードをコンパイルすることはできますが、Accelerometer.isSupported プロパティを使用して、Accelerometer 機能が現在の Flash Player ランタイムのデプロイ環境で使用できるかどうかをテストする必要があります。Accelerometer.isSupported がランタイムで true の場合、Accelerometer は現在サポートされています。
AIR プロファイルのサポート:この機能はモバイルデバイスでのみサポートされます。デスクトップまたはテレビ用 AIR デバイスではサポートされません。複数のプロファイル間での API サポートについて詳しくは、AIR プロファイルのサポートを参照してください。
次の例では、加速度センサーの update イベントに基づいて、スプライトを移動します。加速度センサーの update イベントは、デバイスが移動したことを示します。
package
{
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.AccelerometerEvent;
import flash.sensors.Accelerometer;
public class AccelerometerTest extends Sprite
{
private var ball:Sprite;
private var accelerometer:Accelerometer;
private var xSpeed:Number = 0;
private var ySpeed:Number = 0;
private const RADIUS = 20;
public final function AccelerometerTest()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
createBall();
if (Accelerometer.isSupported)
{
accelerometer = new Accelerometer();
accelerometer.addEventListener(AccelerometerEvent.UPDATE, accUpdateHandler);
stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
}
}
private final function createBall():void
{
ball = new Sprite();
ball.graphics.beginFill(0xFF0000);
ball.graphics.drawCircle(0, 0, RADIUS);
ball.cacheAsBitmap = true;
ball.x = stage.stageWidth / 2;
ball.y = stage.stageHeight / 2;
addChild(ball);
}
private final function enterFrameHandler(event:Event):void
{
event.stopPropagation();
moveBall();
}
private final function moveBall():void
{
var newX:Number = ball.x + xSpeed;
var newY:Number = ball.y + ySpeed;
if (newX < 20)
{
ball.x = RADIUS;
xSpeed = 0;
}
else if (newX > stage.stageWidth - RADIUS)
{
ball.x = stage.stageWidth - RADIUS;
xSpeed = 0;
}
else
{
ball.x += xSpeed;
}
if (newY < RADIUS)
{
ball.y = RADIUS;
ySpeed = 0;
}
else if (newY > stage.stageHeight - RADIUS)
{
ball.y = stage.stageHeight - RADIUS;
ySpeed = 0;
}
else
{
ball.y += ySpeed;
}
}
private final function accUpdateHandler(event:AccelerometerEvent):void
{
xSpeed -= event.accelerationX * 2;
ySpeed += event.accelerationY * 2;
}
}
}