選擇使用正確的感應器 (HTML)
[ 本文的目標對象是撰寫 Windows 執行階段 App 的 Windows 8.x 和 Windows Phone 8.x 開發人員。如果您正在開發適用於 Windows 10 的 App,請參閱 最新文件 ]
感應器可讓應用程式得知裝置與周遭實際環境之間的關係。感應器會將裝置的方向、指向及動作告知您的應用程式。這些感應器提供獨特的輸入形式 (例如透過裝置的動作來排列螢幕上的字元,或模擬在駕駛艙中以及將裝置當成方向盤操縱),有助您提高遊戲、擴增實境應用程式或公用應用程式的實用性與互動性。
您應該從最開始就決定應用程式是否只仰賴感應器,或是只讓感應器提供額外的控制機制,這是一個普遍規則。 例如,將裝置當成虛擬方向盤的駕駛遊戲可以選擇透過螢幕上的 GUI 來控制。這樣一來,無論系統是否有感應器,應用程式都能夠運作。 另一方面,您撰寫彈珠傾斜迷宮的程式碼時,可讓它只能在具備適當感應器的系統上運作。 您必須進行策略抉擇,決定是否要完全倚賴感應器。 請注意,雖然滑鼠/觸控的操作方式比較不容易覺得身歷其境,但控制性較佳。
感應器批次處理
某些感應器支援批次處理的概念。這取決於使用者所用的感應器。當感應器執行批次處理時,會根據指定的時間間隔收集多個資料點,然後一次傳送所有的資料。某些感應器開始讀取數據後,一有結果便會立即回報,這和此處介紹的感應器不同。請參閱下圖,您可以了解資料的收集和傳送方式,一開始是常規的資料傳送,然後是批次方式的資料傳送。
感應器批次處理的主要優點就是延長電池續航力。不立即傳送資料的話,處理器可以節省耗電,也免去需要立即處理資料的工夫。系統的某些組件在不用的時候,可以持續進入睡眠狀態,可大幅節省耗電
您可以調整延遲時間,即可控制感應器傳送批次資料的頻率。例如,Accelerometer 的 ReportLatency 屬性。為應用程式設定這個屬性之後,感應器就會在指定的時間之後傳送資料。您可以設定 ReportInterval,這樣就可以在規定的延遲時間內,控制可以累積的資料數量。
設定延遲性時,有幾點重要聲明,請您牢記於心。第一點重要聲明是:根據感應器自身情況,它們可以接受的 MaxBatchSize 各自不同。這是指感應器最多可以快取的事件數量,超過此限之後,就必須傳送出去。將 MaxBatchSize 乘以 ReportInterval 之後,就會得出 ReportLatency 最大值。如果指定的值大於這個最大值,就會使用延遲時間上限,以免您遺失資料。此外,即使有多個應用程式,每一個還是可以設定自己的延遲時間。為了滿足所有的應用程式的需求,系統會採用最短的延遲時間。因為這些種種的因素,所以您在應用程式中設定的延遲時間,有可能會與觀察到的延遲時間不一致。
感應器使用批次報告時,呼叫 GetCurrentReading 即可清除目前的批次資料,然後開始新的延遲時間。
加速計
Accelerometer 感應器可測量裝置沿著 X 軸、Y 軸及 Z 軸的重力值,很適合簡單動作應用程式。 請注意,所謂的重力值包括因重力而產生的加速度。如果裝置在桌面上的 FaceUp 為 SimpleOrientation,加速計的 Z 軸讀數就是 -1 G。 因此,加速計不見得只會測量座標加速度 (速度的變動率)。 當使用加速計時,請務必區別重力向量與重力的區隔,以及線性加速向量與動作的區隔。 請注意,靜止裝置的重力向量應該正規化為 1。
下圖說明:
- V1 = 向量 1 = 因重力而產生的力
- V2 = 向量 2 = 裝置底座的 -Z 軸 (自螢幕背面向外指)
- Θi = 斜度 (傾斜角度) = 裝置底座 –Z 軸與重力向量之間的角度
可使用加速計感應器的應用程式,包括以您傾斜裝置的方向 (重力向量) 讓彈珠在螢幕上滾動的遊戲。 這類功能會密切對應到 Inclinometer 的功能,且也可利用該感應器或結合使用俯仰與翻滾動作來完成。 使用加速計的重力向量,為裝置傾斜提供輕鬆以數學方式操控的向量,可稍微簡化此動作。 另一個範例是使用者在空中揮動裝置 (線性加速向量) 時,讓鞭子發出霹啪聲的應用程式。
陀螺儀
Gyrometer 感應器可測量沿著 X 軸、Y 軸及 Z 軸的角速度。 這在簡單動作應用程式中非常有用,因為這些應用程式不受裝置指向影響,但會受到裝置以不同速度旋轉所影響。 陀螺儀會因為資料中的雜訊或沿著一或多軸的常數偏差而受到影響。 您應該查詢加速計以確認裝置是否正在移動,以判斷陀螺儀是否受到偏差所影響,然後據此在應用程式中加以補償。
使用陀螺儀感應器的應用程式範例,就是將裝置猛然快速旋轉來旋轉輪盤的遊戲。
指南針
Compass 感應器可根據地球水平面傳回磁北的 2D 指向。 指南針感應器不應該用來判斷特定裝置指向,或用來代表 3D 空間中的任何事物。 地理功能會導致指向形成自然偏角,因此有些系統同時支援 HeadingMagneticNorth 與 HeadingTrueNorth。 請想想您的應用程式偏好哪一種;但請記住,並非所有系統都會回報真北值。 結合陀螺儀與磁力儀 (測量磁力強度的裝置) 感應器兩者的資料以產生指南針朝向,而其淨影響就是可穩定資料 (磁場強度會因電力系統設備而極不穩定)。
想要顯示羅盤或巡覽地圖的應用程式,通常都會使用指南針感應器。
傾角計
Inclinometer 感應器可指定裝置的偏擺、俯仰及翻滾的值,最適合以裝置在空間之定位方式為基準的應用程式。 俯仰與翻滾是採用加速計的重力向量以及整合陀螺儀提供的資料所衍生。 偏擺則是以磁力儀與陀螺儀 (類似指南針朝向) 的資料建立。傾角計以易於解讀和理解的方式提供高階指向資料。 當您需要裝置指向但不需要操控感應器資料時,可以使用傾角計。
本身會變更檢視方式以符合裝置指向的應用程式,都可以使用傾角計感應器。再者,本身會根據裝置偏擺、俯仰及翻滾而顯示飛機動作的應用程式,也可以使用傾角計讀數。
方向感應器
裝置指向可透過四元數與旋轉矩陣來表達。 OrientationSensor 提供的高精確度可用來判斷裝置在空間中相對於絕對指向的定位方式。OrientationSensor 資料衍生自加速計、陀螺儀及磁力儀。 因此,傾角計感應器與指南針感應器都可以從四元數的值衍生。 四元數與旋轉矩陣對於高階數學操作很有助益,通常用於圖形程式設計。 因為許多轉換方式都是以四元數與旋轉矩陣為基礎,所以使用複雜操作的應用程式應該會偏好使用方向感應器。
方向感應器通常用於高階擴增實境應用程式,這種應用程式會根據裝置背面所指的方向,對您的周遭環境繪製覆疊。
簡單方向
SimpleOrientationSensor 可偵測特定裝置目前的象限指向,以及它面朝上或朝下。這有六種可能的 SimpleOrientation 狀態 (NotRotated、Rotated90、Rotated180、Rotated270、FaceUp、FaceDown)。
根據裝置是平行於地面或與地面成直角而變更其顯示方式的閱讀程式,都可以使用 SimpleOrientationSensor 的值來判斷裝置的手持姿勢。