使用 Windows 10 中的加速度计(Accelerometer,重力传感器)

栏目: ASP.NET · 发布时间: 5年前

内容简介:在做 UWP 应用开发的时候还有什么理由可以用到加速度计呢?场景很多啦,比如做游戏,做类似 Surface Hub 那种一边旋转,一边所有内容跟着一起转的效果。Windows 10 UWP 中的加速度计使用非常简单,只需要简单几句代码即可。视频正在上传中……

在做 UWP 应用开发的时候还有什么理由可以用到加速度计呢?场景很多啦,比如做游戏,做类似 Surface Hub 那种一边旋转,一边所有内容跟着一起转的效果。

Windows 10 UWP 中的加速度计使用非常简单,只需要简单几句代码即可。

重力迷宫游戏

视频正在上传中……

初始化 Accelerometer

AccelerometerWindows.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 事件中获得的读数数值。

这里计算所得的角度值是下面图片中所指示的角度值。

使用 Windows 10 中的加速度计(Accelerometer,重力传感器) ▲ X 方向数值

使用 Windows 10 中的加速度计(Accelerometer,重力传感器) ▲ Y 方向数值

参考资料

本文会经常更新,请阅读原文: https://walterlv.com/post/uwp-accelerometer.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

使用 Windows 10 中的加速度计(Accelerometer,重力传感器) 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接:https://walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 (walter.lv@qq.com)


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

An Introduction to Genetic Algorithms

An Introduction to Genetic Algorithms

Melanie Mitchell / MIT Press / 1998-2-6 / USD 45.00

Genetic algorithms have been used in science and engineering as adaptive algorithms for solving practical problems and as computational models of natural evolutionary systems. This brief, accessible i......一起来看看 《An Introduction to Genetic Algorithms》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具