Windows Phone 开发中重力感应的简单使用示例

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 09:45 点击:

 

 

现在智能手机的交互都是通过一个大屏幕,开发手机游戏或应用时,对程序的操作在某些情况下使用加速度感应器会提高用户体验。

 

WindowsPhone SDK 7.1也提供了加速度模拟器,可以更好地测试程序。

 

以下是在一个XNA程序中简单的使用加速度感应的方法:

 

使用加速度感应器需要先引入命名空间

 

 

   1: using Microsoft.Devices.Sensors;

并给用来提供程序控制(操作)的类添加一个属性用来存放感应器实例

 

   1: Accelerometer accelerometer;

同时,此例中,简单的将对手机重力的变化归结到 上下左右的四向操作中,所以这里添加四个类属性用来表示四个方向是否被触发

 

   1: private static Boolean trunUp = false;

   2: private static Boolean trunDown = false;

   3: private static Boolean trunLeft = false;

   4: private static Boolean trunRight = false;

 

 

然后在类的初始化函数(Initialize)中对Accelerometer进行初始化

 

   1: //检测是否支持加速度感应(如果不支持这里简单做异常抛出来)

   2: if (!Accelerometer.IsSupported)

   3: {

   4:    // The device on which the application is running does not support

   5:    // the accelerometer sensor. Alert the user and disable the

   6:    // Start and Stop buttons.

   7:    throw new Exception("device does not support accelerometer");

   8: }

   9: //初始化accelerometer

  10: if (accelerometer == null)

  11: {

  12:    // Instantiate the Accelerometer.

  13:    accelerometer = new Accelerometer();

  14:    //设置感应器检测间隔 单位是毫秒 (The default value is 2 milliseconds.[MSDN])

  15:    accelerometer.TimeBetweenUpdates = TimeSpan.FromMilliseconds(20);

  16:    //[个人理解] 添加监听事件的回调函数 (accelerometer_CurrentValueChanged),

  17:    //          即每次检测的到的结果交给此方法进行处理(本例中用来更新四个方向指示属性)

  18:    accelerometer.CurrentValueChanged += new EventHandler<SensorReadingEventArgs<AccelerometerReading>>(accelerometer_CurrentValueChanged);

  19: }

  20: try

  21: {

  22:    //开始感应器检测

  23:    accelerometer.Start();

  24: }

  25: catch (InvalidOperationException ex)

  26: {

  27:    throw new Exception("unable to start accelerometer.", ex);

  28: }

编写回调函数来处理感应器的变化(将变化对应到四个方向属性上。【注意!本例只考虑横屏情况,竖屏情况坐标系略有不同】)

 

   1: void accelerometer_CurrentValueChanged(object sender, SensorReadingEventArgs<AccelerometerReading> e)

   2: {

   3:   

   4:    //将方向属性归位

   5:    trunUp = false;

   6:    trunDown = false;

   7:    trunLeft = false;

   8:    trunRight = false;

   9: 

  10:    //将重力感应器得到的数据映射到单位三维矢量上

  11:    // (得到的加速度方向矢量三维均是0--1的数值表示XYZ轴

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • Windows Phone 项目实战之我的微盘(下)
    • Windows Phone 实用开发技巧(26):对DataTemplate中的元素播放
    • Windows Phone 实用开发技巧(25):Windows Phone读取本地数据
    • Windows Phone 实用开发技巧(27):创建透明Tile
    • Windows Phone 知识锦(12月版)
    • Windows Phone实用开发技巧(31):密码加密
    • Windows Phone 项目实战之我的微盘(上)
    • WP7实例篇之土豆搜索器(2)
    • [翻译]WP7 QuickStart-第七篇-布局
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1