若要使用加速計感應器,請初始化 Accelerometer 物件,並註冊它所傳送的
update
事件。
update
事件是 Accelerometer 事件物件。這個事件有四個屬性,而且每個屬性都是數字:
-
accelerationX
:沿著 x 軸加速,單位為 G。當裝置處於直立狀態時,X 軸的方向是從裝置的左邊到右邊 (裝置的頂端面向上方時,裝置就是處於直立狀態)。如果裝置移向右方,則加速為正值。
-
accelerationY
:沿著 y 軸加速,單位為 G。當裝置處於直立狀態時,Y 軸的方向是從裝置的底部到上方 (裝置的頂端面向上方時,裝置就是處於直立狀態)。如果裝置向上移到這個軸的相對位置,加速會是正值。
-
accelerationZ
:沿著 z 軸加速,單位為 G。Z 軸延伸方向與裝置表面垂直。如果您移動裝置,讓裝置的表面指向上方,加速會是正值。如果裝置的表面朝面地面,則加速會是負值。
-
timestamp
:從執行階段初始化之後,事件時間的毫秒數。
1 g 是標準重力加速,大約 9.8 米/秒
2
。
以下是在文字欄位中顯示加速計資料的基本範例:
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()
}
若要使用這個範例,請確認建立
accTextField
文字欄位,並先將它新增至顯示清單,再使用這個程式碼。
您可以呼叫 Accelerometer 物件的
setRequestedUpdateInterval()
方法,調整加速計事件的預定時間間隔。這個方法接受一個參數 (
interval
),而這個參數是要求的更新間隔 (毫秒):
var accl:Accelerometer;
accl = new Accelerometer();
accl.setRequestedUpdateInterval(1000);
加速計更新之間的實際時間可能大於或小於這個值。在更新間隔中所做的任何變更會影響所有註冊的偵聽程式。 如果您未呼叫
setRequestedUpdateInterval()
方法,則應用程式會根據裝置的預設間隔來接收更新。
加速計資料會有某種程度的不準確度。您可以使用最近資料的移動平均值讓資料更平順。例如,下列範例納入最近加速計讀數與目前讀數,以取得四捨五入的結果。
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));
}
不過,只有在加速計更新很小時,才適合使用這個移動平均值。