Windows Phone XNA游戏提供的重力传感器可以利用量测重力的原理判手机移动的方向,允许使用者利用摇动或甩动手机的方式控制游戏的执行,其原理和汽车的安全气囊相同,在侦测到汽车快速减速的时候立刻充气以保护驾驶人与乘客不会受伤。要使用重力传感器当做游戏程序的输入,以 XNA 为基础的游戏程序可以利用 Accelerometer 类别提供的功能启用/停用重力加速器,取得重力加速器的状态,以及处理重力加速器引发的事件。

Accelerometer 类别常用的属性

属性名称

说明

State

管理重力加速器状态的属性,其型态为 SensorState 列举型态。有关 SensorState 列举型态合法的内容值可以参考表4 的说明。

Accelerometer 类别常用的方法

方法名称

说明

Start

开始从重力加速器读取数据。

Stop

结束从重力加速器读取数据。

Accelerometer 类别常用的事件

事件名称

说明

ReadingChanged

当重力加速器读取到数据时会引发的事件。

处理 ReadingChanged 事件的事件处理程序的第二个参数的型态为 AccelerometerReadingEventArgs 类别,其 X、Y、与 X 属性的内容值代表智能型手机在 X 轴、Y 轴、和 Z 轴的加速方向,而不是三度空间的坐标,其单位为重力单位,也就是 G 力 (1G = 9.81 m/s2)。除了 X、Y、与 Z 三个属性以外,还有一个名称为 Timestamp 的属性,负责记录重力加速器读取数据的时间点。

请注意当手机放在平坦的桌面上,而且正面朝上的时候,AccelerometerReadingEventArgs 类别的 Z 字段的内容值会是 -1.0,表示 Z 轴承受 -1G 的重力,而当手机放在平坦的桌面上,而且正面朝下的时候,AccelerometerReadingEventArgs 类别的 Z 字段的内容值就会是 +1.0,表示 Z 轴承受 1G 的重力。

[说明]

透过 Accelerometer 类别的 State 属性取得的重力加速器状态是 SensorState 列举型态的数据,其合法的内容值请参考表 的说明:

内容值名称

说明

NotSupported

未支持重力加速器。

Ready

重力加速器处于可以处理数据的状态。

Initializing

重力加速器正在初始化。

NoData

未支持重力加速器。

NoPermissions

呼叫者没有权限取用重力加速器接收到的数据。

Disabled

重力加速器处于禁用的状态。

要使用重力加速器判断智能型手机加速的方向,首先您必须使用鼠标的右键点中 [Solution Explorer] 窗口中的项目名称,从出现的菜单选择 [Add Reference] 功能,然后于出现的窗口中选择名称为 Microsoft.Devices.Sensors 的组件,添加引用上去。

下面看一个例子:

  1. using System;
  2. using System.Windows;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using Microsoft.Xna.Framework;
  6. using Microsoft.Xna.Framework.Audio;
  7. using Microsoft.Xna.Framework.Content;
  8. using Microsoft.Xna.Framework.GamerServices;
  9. using Microsoft.Xna.Framework.Graphics;
  10. using Microsoft.Xna.Framework.Input;
  11. using Microsoft.Xna.Framework.Input.Touch;
  12. using Microsoft.Xna.Framework.Media;
  13. using Microsoft.Devices.Sensors;
  14. namespace AccelerometerSample
  15. {
  16. /// <summary>
  17. /// This is the main type for your game
  18. /// </summary>
  19. public class Game1 : Microsoft.Xna.Framework.Game
  20. {
  21. GraphicsDeviceManager graphics;
  22. SpriteBatch spriteBatch;
  23. SpriteFont readingsFont;//字体资源
  24. Accelerometer accelerometer;//重力加速器
  25. double X;
  26. double Y;
  27. double Z;
  28. public Game1()
  29. {
  30. graphics = new GraphicsDeviceManager(this);
  31. Content.RootDirectory = "Content";
  32. // Frame rate is 30 fps by default for Windows Phone.
  33. TargetElapsedTime = TimeSpan.FromTicks(333333);
  34. }
  35. /// <summary>
  36. /// Allows the game to perform any initialization it needs to before starting to run.
  37. /// This is where it can query for any required services and load any non-graphic
  38. /// related content.  Calling base.Initialize will enumerate through any components
  39. /// and initialize them as well.
  40. /// </summary>
  41. protected override void Initialize()
  42. {
  43. // TODO: Add your initialization logic here
  44. //初始化重力加速器
  45. accelerometer = new Accelerometer();
  46. //读取重力改变事件
  47. accelerometer.ReadingChanged += new EventHandler<AccelerometerReadingEventArgs>(AccelerometerReadingChanged);
  48. //开始其中重力加速器
  49. accelerometer.Start();
  50. base.Initialize();
  51. }
  52. /// <summary>
  53. /// LoadContent will be called once per game and is the place to load
  54. /// all of your content.
  55. /// </summary>
  56. protected override void LoadContent()
  57. {
  58. // Create a new SpriteBatch, which can be used to draw textures.
  59. spriteBatch = new SpriteBatch(GraphicsDevice);
  60. // TODO: use this.Content to load your game content here
  61. //加载字体资源
  62. readingsFont = Content.Load<SpriteFont>("readings");
  63. }
  64. /// <summary>
  65. /// UnloadContent will be called once per game and is the place to unload
  66. /// all content.
  67. /// </summary>
  68. protected override void UnloadContent()
  69. {
  70. // TODO: Unload any non ContentManager content here
  71. accelerometer.Stop();
  72. }
  73. /// <summary>
  74. /// Allows the game to run logic such as updating the world,
  75. /// checking for collisions, gathering input, and playing audio.
  76. /// </summary>
  77. /// <param name="gameTime">Provides a snapshot of timing values.</param>
  78. protected override void Update(GameTime gameTime)
  79. {
  80. // Allows the game to exit
  81. if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
  82. this.Exit();
  83. // TODO: Add your update logic here
  84. base.Update(gameTime);
  85. }
  86. /// <summary>
  87. /// This is called when the game should draw itself.
  88. /// </summary>
  89. /// <param name="gameTime">Provides a snapshot of timing values.</param>
  90. protected override void Draw(GameTime gameTime)
  91. {
  92. GraphicsDevice.Clear(Color.CornflowerBlue);
  93. // TODO: Add your drawing code here
  94. spriteBatch.Begin();
  95. //绘制文字
  96. spriteBatch.DrawString(readingsFont, "X: " + X.ToString("0.00"), new Vector2(50, 50), Color.White);
  97. spriteBatch.DrawString(readingsFont, "Y: " + Y.ToString("0.00"), new Vector2(50, 75), Color.White);
  98. spriteBatch.DrawString(readingsFont, "Z: " + Z.ToString("0.00"), new Vector2(50, 100), Color.White);
  99. spriteBatch.End();
  100. base.Draw(gameTime);
  101. }
  102. void AccelerometerReadingChanged(object sender, AccelerometerReadingEventArgs e)
  103. {
  104. //触发UI更新
  105. Deployment.Current.Dispatcher.BeginInvoke(() => NewReading(e));
  106. }
  107. //赋值XYZ的值
  108. void NewReading(AccelerometerReadingEventArgs e)
  109. {
  110. X = e.X;
  111. Y = e.Y;
  112. Z = e.Z;
  113. }
  114. }
  115. }

本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1078392

XNA游戏:重力感应相关推荐

  1. android 传感器小游戏,重力感应球游戏

    重力感应球游戏是一款休闲益智类闯关游戏,有采用卡通的画风设计,超有趣的闯关玩法模式,在这里各种不同的游戏关卡等你来挑战,带给玩家最轻松有趣的闯关乐趣,非常的有意思,喜欢的小伙伴还在等什么,快来下载看看 ...

  2. android小游戏模版—重力感应

    好久没更新博客了,今天来谈谈android小游戏---重力感应,一般在游戏里运用的比較多,比方这类游戏有:神庙逃亡.极品飞车,平衡球.三围重力迷宫,重力赛车等. 首先什么是重力感应.重力感应是指如今手 ...

  3. Unity3D 游戏引擎之平面小球重力感应详解【转】

    http://blog.csdn.net/xys289187120/article/details/6969333       手机重力感应应该对大多数开发者并不陌生,在新一代智能手机Android  ...

  4. 重力感应游戏可行性办法研究_完结

    重力感应游戏可行性办法研究 一.手机中的重力感应组件 很多人都知道手机有重力感应这个功能,但是重力感应具体是什么,却并不是很了解.重力感应组件不是摄像头,人们知道有多少万像素,不是触摸屏,人们了解是电 ...

  5. 我的雷电游戏(重力感应控制)

    算是第一个写的比较满意的游戏吧,肯定还有很多很多不足,希望高手能指点下,呵.现在在看图灵出版的一本android游戏的书籍,有点难,涉及底层有点多,都是JNI.NDK.linux shell脚本等,主 ...

  6. 基于野火M3开发板(STM32F103VET6)的迷宫小球(重力感应控制)游戏开发

    2013-03-03 这是研一上学期<实时嵌入式系统实验>课程的大作业,是利用野火板的资源,加上一个AHRS(Attitude and Heading Reference System,姿 ...

  7. XNA游戏:各种输入测试 中

    GestureDefinition.cs using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Inpu ...

  8. 重力感应机制和手机的屏幕绘画

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 利用手机的重力感应机制和手机的屏幕绘画功能,实现一款躲避休闲游戏. 实现平台,工具: 采用java ADT工具,jav ...

  9. Android重力感应示例

    android中的很多游戏的游戏都使用了重力感应的技术,就研究了一下重力感应 以屏幕的左下方为原点,箭头指向的方向为正.从-10到10,以浮点数为等级单位,想象以下情形: 手机屏幕向上(z轴朝天)水平 ...

最新文章

  1. ubuntu 18.04 添加快快捷方式
  2. 计算机虚拟化技术论文,【计算机网络论文】虚拟技术计算机网络论文(共1775字)...
  3. 常用 IO 模型图解介绍
  4. [ZJOI2007]报表统计(链表法+set)
  5. ic 卡获取帐号apdu指令_《全球行动》携手京东校园送福利 1000元京东卡等你拿
  6. Socket基础知识分享
  7. 20191112每日一句
  8. oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法
  9. 大数据shipin教程_大数据自学全套视频教程下载
  10. java支付管理有源码_一款java版可接入微信、支付宝的三方支付系统项目
  11. php flash斗地主,flash斗地主
  12. 免费且好用的UML工具推荐
  13. 【杂七杂八】虚拟机win中 腾讯会议视频黑屏
  14. Elasticsearch:Elasticsearch 开发入门 - Golang
  15. Win10桌面图标箭头去掉的方法总结
  16. 人类面部表情数据集(12万张表情照片)
  17. 单模光纤与多模光纤的实际使用
  18. c盘java文件误删_清理C盘误删的文件怎么恢复
  19. 【spider】关于scrapy的安装的几个问题
  20. AOE图,最早活动时间最晚活动时间,关键路径关键节点

热门文章

  1. @Order(Ordered.HIGHEST_PRECEDENCE)什么意思
  2. Mechine learning for OpenCV 学习笔记 day3
  3. 学习打卡王佩丰Excel24讲
  4. Kivy安装使用教程
  5. 移位运算符,>>,<<以及>>>的含义以及运算方法
  6. 空气压缩机调节气压方法
  7. SQL 根据汉字获取全拼
  8. [HAOI 2006]旅行comf
  9. 本轮、均轮背后的傅里叶分解原理(matlab演示)
  10. C语言large函数的作用,LARGE函数简介