Indata från accelerometer

Flash Player 10.1 och senare, Adobe AIR 2 och senare

Klassen Accelerometer skickar händelser baserat på aktivitet som identifieras av enhetens rörelsesensor. Dessa data representerar enhetens placering eller förflyttning längs en tredimensionell axel. När enheten rör sig känner sensorn av rörelsen och returnerar enhetens accelerationskoordinater. Klassen Accelerometer innehåller metoder för att fråga om accelerometerfunktionen stöds samt för att ange den hastighet med vilken accelerationshändelser skickas.

Accelerometeraxlarna normaliseras efter visningsorienteringen, inte enhetens fysiska orientering. När enheten orienterar om skärmen orienteras även accelerometeraxlarna om. Y-axeln är således alltid ungefär lodrät när användaren håller telefonen i ett normalt, upprätt visningsläge, oavsett åt vilket håll telefonen har roterats. Om automatisk orientering är inaktiverat, och SWF-innehåll i webbläsaren visas i helskärmsläge, orienteras accelerometeraxlarna inte om när enheten roteras.

Kontrollera stöd för accelerometern

Använd egenskapen Accelerometer.isSupported för att testa om körningsmiljön kan använda den här funktionen:

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

Klassen Accelerometer med dess medlemmar är tillgängliga i de körningsversioner som visas för varje API. Men det är den aktuella miljön vid körningen som avgör om funktionen är tillgänglig eller inte. Du kan till exempel kompilera kod med egenskaperna för klassen Accelerometer för Flash Player 10.1, men du behöver använda egenskapen Accelerometer.isSupported för att testa om accelerometerfunktionen är tillgänglig på användarens enhet. Om värdet för Accelerometer.isSupported är true vid körningen stöds accelerometerfunktionen.

Identifiera accelerometerändringar

Använd sensorn för accelerometern genom att instansiera ett Accelerometer-objekt och registrera update-händelser som skickas. Händelsen update är ett Accelerometer-händelseobjekt. Händelsen har fyra egenskaper, som anges med siffror:

  • accelerationX – Accelerationen längs med x-axeln mätt i antal g:n. X-axeln går från vänster till höger på enheten när den står upprätt. (Enheten är i upprätt läge när den övre delen av enheten är pekar uppåt.) Accelerationen är positiv om enheten flyttas åt höger.

  • accelerationX – Accelerationen längs med y-axeln mätt i antal g:n. Y-axeln går nedifrån och upp på enheten när den står upprätt. (Enheten är i upprätt läge när den övre delen av enheten är pekar uppåt.) Accelerationen är positiv om enheten flyttas uppåt i förhållande till axeln.

  • accelerationZ – Accelerationen längs med z-axeln mätt i antal g:n. Z-axeln går vinkelrätt mot enhetens kant. Accelerationen är positiv om enheten flyttas så att ytan pekar uppåt. Accelerationen är negativ om ytan på enheten pekar mot marken.

  • timestamp – Det antal millisekunder som vid tiden för händelsen har passerat sedan körningen initierades.

1 g är standardaccelerationen på grund av gravitationen, cirka 9,8 m/sek2..

Det här grundläggande exemplet visar accelerometerdata i ett textfält:

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() 
}

Om du vill använda exemplet måste du först skapa textfältet accTextField och lägga till det i visningslistan innan koden används.

Du kan justera det önskade tidsintervallet för accelerometerhändelser genom att anropa metoden setRequestedUpdateInterval() för Accelerometer-objektet. Den här metoden tar en parameter, interval, vilken är det uppdateringsintervall som krävs i millisekunder:

var accl:Accelerometer; 
accl = new Accelerometer(); 
accl.setRequestedUpdateInterval(1000);

Den faktiska tiden mellan uppdateringarna av accelerometern kan vara längre eller kortare än det här värdet. Förändringar av uppdateringsintervallet påverkar alla registrerade avlyssnare. Om du inte anropar metoden setRequestedUpdateInterval() tar programmet emot uppdateringar beroende på enhetens standardintervall.

Accelerometerdata kan ha en viss grad av inexakthet. Du kan använda ett glidande medelvärde av senaste data för utjämning av data. I följande exempel faktoreras de senaste accelerometerläsningarna med den aktuella läsningen för ett mer avrundat resultat:

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)); 
}

Men detta glidande medelvärde är endast önskvärt om uppdateringsintervallet för accelerometern är litet.