Чтобы использовать датчик акселерометра, создайте экземпляр объекта Accelerometer и зарегистрируйте отправляемое им событие
update
. Событие
update
является объектом события Accelerometer. Событие имеет четыре свойства, каждое из которых является числом:
-
accelerationX
: ускорение вдоль оси X, измеряется в Галах (Г). Ось X направлена слева направо относительно устройства, когда оно находится в вертикальном положении. (Устройство находится в вертикальном положении, когда верхняя часть устройства направлена вверх.) Ускорение имеет положительное значение, если устройство перемещается вправо.
-
accelerationY
: ускорение вдоль оси Y, измеряется в Галах (Г). Ось Y направлена снизу вверх относительно устройства, когда оно находится в вертикальном положении. (Устройство находится в вертикальном положении, когда верхняя часть устройства направлена вверх.) Ускорение имеет положительное значение, если устройство перемещается вверх относительно этой оси.
-
accelerationZ
: ускорение вдоль оси Z, измеряется в Галах (Г). Ось Z направлена перпендикулярно лицевой стороне устройства. Ускорение имеет положительное значение, если при перемещении устройства его лицевая сторона направлена вверх. Ускорение имеет отрицательное значение, если лицевая сторона устройства направлена в сторону земли.
-
timestamp
: число миллисекунд на момент события, начиная с инициализации среды выполнения.
1 Г — это стандартное ускорение в следствие гравитации, которое приближенно равно 9,8 м/с
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
и добавьте его в список отображения.
Можно настроить необходимый интервал времени для событий акселерометра, вызвав метод
setRequestedUpdateInterval()
объекта Accelerometer. В этом методе используется один параметр
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));
}
Однако это скользящее среднее желательно использовать только при небольшом интервале обновления акселерометра.