Para utilizar el sensor del acelerómetro, cree una instancia del objeto Accelerometer y registre los eventos
update
que distribuya. El evento
update
es un objeto de evento Accelerometer. Este evento tiene cuatro propiedades y todas son números:
-
accelerationX
: aceleración en el eje x, medida en g. El eje x se ejecuta de izquierda a derecha en el dispositivo cuando está en la posición vertical. (El dispositivo está en orientación vertical y con la parte superior hacia arriba.) La aceleración es positiva si el dispositivo se mueve hacia la derecha.
-
accelerationY
: aceleración en el eje y, medida en g. El eje y se ejecuta de abajo arriba en el dispositivo cuando está en la posición vertical. (El dispositivo está en orientación vertical y con la parte superior hacia arriba.) La aceleración es positiva si el dispositivo se mueve hacia arriba con relación a este eje.
-
accelerationZ
: aceleración en el eje z, medida en g. El eje z se ejecuta perpendicular a la cara del dispositivo. La aceleración es positiva si mueve el dispositivo de modo que la parte frontal apunte hacia arriba. La aceleración es negativa si la parte frontal del dispositivo apunta hacia el suelo.
-
timestamp
: el número de milisegundos en el momento del evento desde que se inicializó el motor de ejecución.
1 g es la aceleración estándar debida a la gravedad, aproximadamente 9,8 m/s
2.
.
A continuación incluimos un ejemplo básico que muestra datos del acelerómetro en un campo de texto:
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()
}
Para usar este ejemplo, debe crear un campo de texto
accTextField
y añadirlo a la lista de visualización antes de utilizar este código.
Puede ajustar el intervalo de tiempo deseado para los eventos de acelerómetro llamando al método
setRequestedUpdateInterval()
del objeto Accelerometer. Este método toma un parámetro,
interval
, que es el intervalo de actualización requerido, en milisegundos:
var accl:Accelerometer;
accl = new Accelerometer();
accl.setRequestedUpdateInterval(1000);
El tiempo real entre las actualizaciones de acelerómetro puede ser mayor o menor que este valor. Cualquier cambio en el intervalo de actualización afecta a todos los detectores registrados. Si no llama al método
setRequestedUpdateInterval()
, la aplicación recibe actualizaciones basadas en el intervalo predeterminado del dispositivo.
Los datos del acelerómetro tienen cierto grado de imprecisión. Puede utilizar una media aproximada de los datos recientes para mejorar los datos. Por ejemplo, a continuación se analizan diversas lecturas recientes del acelerómetro con la lectura actual para obtener un resultado redondeado:
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));
}
Sin embargo, esta media aproximada solo es deseable si el intervalo de actualización del acelerómetro es pequeño.