Versnellingsmeterinvoer

Flash Player 10.1 of hoger, Adobe AIR 2 of hoger

De Accelerometer-klasse verstuurt gebeurtenissen op basis van de activiteit die door de bewegingssensor van het apparaat wordt gedetecteerd. Deze gegevens vertegenwoordigen de locatie of beweging van het apparaat langs een driedimensionale as. Wanneer het apparaat beweegt, detecteert de sensor deze beweging en worden de versnellingscoördinaten van het apparaat geretourneerd. De Accelerometer-klasse biedt methoden om te bepalen of de versnellingsmeter wordt ondersteund en om de snelheid in te stellen waarmee versnellingsgebeurtenissen worden verzonden.

De assen van de versnellingsmeter worden genormaliseerd ten opzichte van de weergave-oriëntatie, niet ten opzichte van de fysieke oriëntatie van het apparaat. Wanneer de weergaveoriëntatie van het apparaat wordt veranderd, veranderen de assen van de versnellingsmeter ook. De y-as is dus altijd min of meer verticaal wanneer de gebruiker de telefoon gewoon rechtop houdt, ongeacht de manier waarop de telefoon is gedraaid. Als automatische oriëntatie uitgeschakeld is, bijvoorbeeld wanneer SWF-inhoud op volledig scherm in een browser wordt weergegeven, worden de assen van de versnellingsmeter niet aangepast wanneer het apparaat wordt gedraaid.

Controleren op ondersteuning voor de versnellingsmeter

Met de eigenschap Accelorometer.isSupported kunt u testen of deze functie kan worden gebruikt in de runtimeomgeving:

if (Accelerometer.isSupported) 
{ 
    // Set up Accelerometer event listeners and code. 
}

De Accelerometer-klasse en de bijbehorende leden zijn toegankelijk voor de runtimeversies die voor elke API-invoer worden vermeld. Of deze functie ook werkelijk beschikbaar is, wordt bepaald door de actuele omgeving tijdens runtime. U kunt bijvoorbeeld code compileren met de eigenschappen van de Accelerometer-klasse voor Flash Player 10.1, maar u moet de eigenschap Accelerometer.isSupported gebruiken om te testen op de beschikbaarheid van de Accelerometer-functie op het gebruikersapparaat. Als de waarde van Accelerometer.isSupported gelijk is aan true tijdens runtime, is er ondersteuning voor de Accelerometer-functie.

Wijzigingen in de versnellingsmeter vaststellen

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.