使用 Windows 10 中的加速度计(Accelerometer,重力传感器)
在做 UWP 應用開發的時候還有什么理由可以用到加速度計呢?場景很多啦,比如做游戲,做類似 Surface Hub 那種一邊旋轉,一邊所有內容跟著一起轉的效果。
Windows 10 UWP 中的加速度計使用非常簡單,只需要簡單幾句代碼即可。
本文內容
- 重力迷宮游戲
- 初始化 Accelerometer
- 得到 Accelerometer 的讀數
- 將 Accelerometer 的讀數轉化成傾斜角度
- 參考資料
重力迷宮游戲
這里有一個利用加速度計的好玩的例子:
▲ 用 Lumia 950XL 玩重力迷宮
畫質太渣了?確實太渣了。那就看看桌面版吧…… 反正是 UWP,兩邊看起來是一樣的。
▲ 重力迷宮桌面版畫面(高清版)
初始化 Accelerometer
Accelerometer 在 Windows.Devices.Sensors 命名空間下,使用時需要在類頂部加上 using。
using Windows.Devices.Sensors;而獲得加速度計的實例只需要一句話:
_accelerometer = Accelerometer.GetDefault();如果設備上沒有加速度計,那么這里拿到的實例就會是 null。所以注意需要進行 null 判斷,畢竟大部分 Windows 10 設備都是普通電腦,沒有加速度計的。
現在,我們對加速度計進行一些簡單的初始化:
_accelerometer = Accelerometer.GetDefault(); if (_accelerometer != null) {// 設置加速度計讀數的報告間隔。這里我們與 16ms 進行判斷,如果小于 16ms 就設為 16ms。// 因為我們在做游戲,幀數就是 60Hz,也就是說,我們不需要更高的讀數間隔。uint minReportInterval = _accelerometer.MinimumReportInterval;uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;_accelerometer.ReportInterval = reportInterval;// 監聽 ReadingChanged 事件,以便在加速度計讀數改變時做一些操作。_accelerometer.ReadingChanged += Accelerometer_ReadingChanged; }得到 Accelerometer 的讀數
在監聽事件的 Accelerometer_ReadingChanged 事件中,我們可以得到加速度計的讀數。
private float _xAxis; private float _yAxis; private float _zAxis;private void Accelerometer_ReadingChanged(Accelerometer sender, AccelerometerReadingChangedEventArgs e) {AccelerometerReading reading = e.Reading;_xAxis = (float) reading.AccelerationX;_yAxis = (float) reading.AccelerationY;_zAxis = (float) reading.AccelerationZ; }這些讀數是 -1 到 1 之間的數值。
將 Accelerometer 的讀數轉化成傾斜角度
在 Win2D 中的游戲循環:CanvasAnimatedControl 一文中,我在 PC 上玩這款游戲,也是在模擬桌子的傾角。于是我們也需要將讀數轉化成 Windows 10 設備的傾斜角度。
private (float xAngle, float yAngle) GetTiltAngles() {if (_accelerometer != null){// 從加速度計中讀取讀數,然后轉換成設備傾斜角度。return ((float) (-_yAxis * Math.PI / 2), (float) (-_xAxis * Math.PI / 2));}else{// 如果沒有加速度計,則從鍵盤獲得模擬的傾斜角度。return GetTiltAnglesByKeyboard();} }這里的 _xAxis 和 _yAxis 就是前面在 Accelerometer_ReadingChanged 事件中獲得的讀數數值。
這里計算所得的角度值是下面圖片中所指示的角度值。
▲ X 方向數值
▲ Y 方向數值
參考資料
- Use the accelerometer - UWP app developer - Microsoft Docs
總結
以上是生活随笔為你收集整理的使用 Windows 10 中的加速度计(Accelerometer,重力传感器)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ONES使用Project一站式项目管理
- 下一篇: 2018百度之星初赛1003