Als u de versnellingsmetersensor wilt gebruiken, moet u een Accelerometer-object instantiëren en registeren voor de
update
-gebeurtenissen die door het object worden verzonden. De
update
-gebeurtenis is een Accelerometer -object. De gebeurtenis heeft vier eigenschappen, allemaal getallen.
-
accelerationX
: versnelling langs de x-as, gemeten in g. De x-as loopt van de linkerkant van het apparaat naar de rechterkant als het apparaat rechtop staat. (Het apparaat staat rechtop als de bovenkant van het apparaat naar boven is gericht.) De versnelling is positief als het apparaat naar rechts beweegt.
-
accelerationY
: versnelling langs de y-as, gemeten in g. De y-as loopt van de onderkant van het apparaat naar de bovenkant als het apparaat rechtop staat. (Het apparaat staat rechtop als de bovenkant van het apparaat naar boven is gericht.) De versnelling is positief als het apparaat naar boven beweegt.
-
accelerationZ
: versnelling langs de z-as, gemeten in g. De z-as staat loodrecht op de voorzijde van het apparaat. De versnelling is positief als u het apparaat verplaatst zodat de voorkant van het apparaat naar boven wijst. De versnelling is negatief als de voorkant van het apparaat naar beneden wijst.
-
timestamp
: het aantal milliseconden na het initialiseren van het runtimeprogramma waarop de gebeurtenis plaatsvindt.
1 g is de standaardversnelling van de zwaartekracht ( ongeveer 9,8 m/sec
2.
).
In dit voorbeeld worden de gegevens over de versnelling in een tekstveld weergegeven:
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()
}
Als u dit voorbeeld wilt gebruiken, moet u het tekstveld
accTextField
maken en dit toevoegen aan de weergavelijst voordat u deze code gebruikt.
U kunt het gewenste tijdsinterval voor versnellingsmetergebeurtenissen aanpassen door de methode
setRequestedUpdateInterval()
van het Accelerometer-object aan te roepen. Deze methode neemt één parameter,
interval
, die staat voor het gevraagde update-interval in milliseconden:
var accl:Accelerometer;
accl = new Accelerometer();
accl.setRequestedUpdateInterval(1000);
De werkelijke tijd tussen versnellingsmeterupdates kan groter of kleiner zijn dan deze waarde. Elke wijziging in het update-interval beïnvloedt alle geregistreerde listeners. Als u de methode
setRequestedUpdateInterval()
niet aanroept, ontvangt de toepassing updates op basis van het standaardinterval voor het apparaat.
De gegevens van de versnellingsmeter zijn niet 100% nauwkeurig. Door het gemiddelde van recente bewegingsgegevens toe te passen kunt u de gegevens betrouwbaarder maken. In het volgende voorbeeld worden recente lezingen van de versnellingsmeter ingecalculeerd bij de huidige lezing om tot een afgerond resultaat te komen:
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));
}
Dit gemiddelde is alleen gewenst bij kleine update-intervallen van de versnellingsmeter.