Akselorometre girdisi

Flash Player 10.1 ve üstü, Adobe AIR 2 ve üstü

Accelerometer sınıfı olayları aygıtın hareket alıcısı tarafından algılanan etkinlikleri temel alarak gönderir. Bu veri aygıtın üç boyutlu bir eksen üzerindeki konumunu veya hareketini temsil eder. Aygıt hareket ettiğinde, alıcı bu hareketi algılar ve aygıtın ivme koordinatlarını döndürür. Accelerometer sınıfı akselerometrenin desteklenip desteklenmediğini sorgulayacak ve ayrıca ivme olaylarının gönderilme hızını ayarlayacak yöntemler sağlar.

Akselerometre eksenleri aygıtın fiziksel yönlendirmesine göre değil ekranın yönlendirmesine göre normalleştirilir. Aygıt ekranı yeniden yönlendirdiğinde akselerometre eksenleri de yeniden yönlendirilir. Telefonun hangi yöne döndürüldüğüne bakılmaksızın, kullanıcı telefonu normal, dik bir görüntüleme konumunda tutarken y ekseni yaklaşık olarak her zaman dikeydir. Örneğin, bir tarayıcıdaki SWF içeriği tam ekran modundayken otomatik yönlendirme kapalıysa, aygıt döndürüldükçe akselerometre eksenleri yeniden yönlendirilmez.

Akselerometre desteğini kontrol etme

Çalışma zamanı ortamının bu özelliği kullanabilme becerisini sınamak için Accelerometer.isSupported özelliğini kullanın:

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

Her bir API girişi için listelenen çalışma zamanı sürümleri, Accelerometer sınıfına ve bu sınıfın üyelerine erişebilir. Buna karşın, çalışma zamanındaki geçerli medya bu özelliğin kullanılabilirliğini belirler. Örneğin, Flash Player 10.1 için Accelerometer sınıfı özelliklerini kullanarak kod derleyebilirsiniz, ancak kullanıcının aygıtında Accelerometer özelliğinin kullanılabilirliğini sınamak için Accelerometer.isSupported özelliğini kullanmanız gerekir. Accelerometer.isSupported çalışma zamanında true ise, Accelerometer desteği o sırada mevcut demektir.

Akselerometre değişikliklerini saptama

Akselerometre sensörünü kullanmak için, Accelerometer nesnesini somutlaştırın ve gönderdiği update olaylarına kaydolun. update olayı bir Accelerometer olayı nesnesidir. Bu olay dört özelliğe sahiptir ve bunların her biri sayıdır:

  • accelerationX—g cinsinden ölçülen, x ekseni boyunca ivme. X ekseni, aygıt dik konumdayken aygıtın solundan sağına doğru gider. (Cihazın tepesi dönükken cihaz dik konumdadır.) Aygıt sağa doğru hareket ederse, ivme pozitiftir.

  • accelerationY—g cinsinden ölçülen, y ekseni boyunca ivme. Y ekseni, aygıt dik konumdayken aygıtın üstünden altına doğru gider. (Cihazın tepesi dönükken cihaz dik konumdadır.) Aygıt bu eksene göre yukarı doğru hareket ederse, ivme pozitiftir.

  • accelerationZ—g cinsinden ölçülen, z ekseni boyunca ivme. Z ekseni, aygıtın önüne dikey olarak gider. Aygıtı, yüzü yukarıya dönecek şekilde hareket ettirirseniz, ivme pozitiftir. Aygıtın yüzü zemine bakıyorsa, ivme negatiftir.

  • timestamp—Çalışma zamanının başlatılmasından olay zamanına kadar geçen milisaniye sayısı.

1 g, yerçekiminden kaynaklanan standart ivmedir ve yaklaşık 9,8 m/sn2. değerine karşılık gelir.

Aşağıda bir metin alanında akselerometre verilerini gösteren basit bir örnek verilmektedir:

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

Bu örneği kullanmak için, accTextField metin alanını oluşturup bu kodu kullanmadan önce ekran listesine eklemeyi unutmayın.

Accelerometer nesnesinin setRequestedUpdateInterval() yöntemini çağırarak akselerometre için istenilen zaman aralığını ayarlayabilirsiniz. Bu yöntemin çağırdığı tek parametre, milisaniye cinsinden talep edilen güncelleme aralığı olan interval parametresidir:

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

Akselerometre güncellemeleri arasındaki asıl süre bu değerden daha büyük veya daha az olabilir. Güncelleme aralığındaki herhangi bir değişiklik tüm kayıtlı dinleyicileri etkiler. setRequestedUpdateInterval() yöntemini çağırmazsanız, uygulama aygıtın varsayılan aralığına göre güncelleme alır.

Akselerometre verileri bir miktar hata payına sahiptir. Verileri düzeltmek için yeni verilerin hareketli bir ortalamasını kullanabilirsiniz. Örneğin, aşağıdaki örnekte akselerometre okumaları yuvarlak bir sonuç elde etmek üzere geçerli okumayla çarpılır:

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

Ancak, bu hareketli ortalama yalnızca akselerometre güncelle aralığı küçükse arzu edilir niteliktedir.