新浪微博 有道云笔记 麦库 EverNote Pocket Instapaper 更多

加速计

加速计(图片版)




















加速计和CoreMotion

 

加速计 和CoreMotion

技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong

全屏

 

w600_4bf6def453161a9fc4597618d206c349.png w600_f971037eaf7e732e5051075db08b3530.png

的iOS 中的主要传感器 • 接近传感器

• 加速度传感器又称加速计

  • 由于 更凑够带来了更多发布的直觉游戏体验,基本姿态识别和环境
     感知功能,目前在智能手机上应用的非常广泛 
  • 目前智能手机中基本国内配备的都是三维线传感器,也就是说,
    用来测量Ÿ Ž 三个轴上的加速度
  • 由于重力分量的干扰,无法仅仅依靠加速度传感器来检测加
     速方向的角度,也无法得知手机本身的朝向 

  • • 陀螺仪造价昂贵,目前并未在智能手机中得到普及基于角动量守恒理论,沿着某个特定的坐标轴测量旋转速率 误差会累积
    • 电子罗盘-又称磁力计,或电子指南针

的iOS 中的主要传感器

 

加速度传感器

电子罗盘

陀螺仪

接近传感器

功能

通过测量三个轴的加速度大小来判断人体运动

通过测量设备周围地磁场的强度和方向来判断朝向

通过测量三个轴的旋转速率来判断朝向

无须物理接触就判断附近物体的存在

主要局限性

受重力干扰大瞬时误差大

误差大,容易受其他磁场和金属物体影响主要用于校正其他设备

误差会累积长时间读数的准确性差

不通用,大多数只针对几种材质

应用

活动测量

导航

导航

智能省电

,,。

加速计

  • • 通过 的iOS 设备提供的内置的加速计,可以确定设备什么时候移动,移动了多少距离以及设备的方向
  • • 在应用程序中,使用 UIAccelerometer 类来接收加速计数据,通过类方法sharedAccelerometer 可以获得该类的实例
  • • 使用加速计需要设置其更新间隔状语从句代理店,此后,在指定的时间间隔,会收到代理方法 加速度:didAccelerate:的回调
  • •    该代理方法收到一个指向加速计的指针和一个指向UIAcceleration 对象的指针
  • • 该加速对象包含: ÿ Ž 时间戳四个属性,其中Ÿ Ž 是设备在这三个方向上的重力加速度,单位

w600_32be7f5730737a99debcd16c8501e66d.pngw600_b3531144e4464eb95a83930189e3c4ba.pngw600_897b223fe1bf63457e55de6d396ff5bb.png

加速计坐标系注意Ÿ 轴的方向

w600_d8a625c4f7603e834a9d18496160e0d3.png

加速计开发测试需要注意

• 加速计的应用只能在真机上开发测试

加速计演练

• 演练
在加速计回调方法中更新小球视图位置,运行并测试

效果 • 演练2

引入QuartzCore.framework 方法定义CADisplay 游戏时钟,并在游戏时钟指定的更新

方法中更新小球视图位置运行并对比两种方式的实现效果

加速计演练小结

• 加速计使用步骤1. 获取共享加速计对象 2. 设置加速计数据更新频率 3. 设置加速计对象代理

• 让加速计负责速度更新,CADislpayLink 负责界面更新的好处

  • 游戏效果更加平滑
  •    2. 界面表示和游戏逻辑可以得到拆分,便于游戏扩展并引入 MVC 设计模式
  • 。3 使用时钟更新,需要注意小球位置的修正
    • UIAccelerometer 虽然已经停止更新,但是目前还是有一定数量的应用中使用到了该技术

CoreMotion 框架 
• 的iOS4 之前,加速度计由UIAccelerometer类来负责采集工作,而电子

罗盘则由核心地段接管

• 随着iPhone4 的推出,由于加速度计的升级以及陀螺仪的引入,  Motion 相关的编程成为重头戏,所以,苹果在iOS4 中增加了一个专门负责该方面处理的框架- 核心运动框架

• 核心运动不仅能够提供实时的加速度值状语从句旋转速度值,更重要的是,苹果在其中集成了很多算法,可以直接输出把重力加速度分量剥离的加速度,省去你的高通滤波操作,以及提供给你一个专门的设备的三维姿态信息

核心运动框架结构示意图-MotionManager中

w600_100c6281311e2830cac6519fdc4c09de.png

核心动态获取数据的两种方式

• 推送(采集所有数据-做运动仿真更好 • (在需要是获取采样数据

w600_cf5b98104032f656c87f27644faf1a22.png

核心运动推演练

• 核心运动Push 使用步骤1. 实例化Motion 管理器 2. 判断传感器是否可用 3. 设定传感器数据更新频率 4. 启动传感器更新, Push 方式更新数据

w600_8f362f287a965f5b6956c50bf824ff57.pngw600_b3531144e4464eb95a83930189e3c4ba.pngw600_897b223fe1bf63457e55de6d396ff5bb.png

w600_152c77bb86e9b30fe8bda133e1eece12.pngw600_b3531144e4464eb95a83930189e3c4ba.pngw600_897b223fe1bf63457e55de6d396ff5bb.png

增加新的功能

• 点击屏幕停止或者启动加速计数据采集

使用dispatch_once 创建MotionManager中的单例

• 好处:线程安全

很好满足静态分析器要求 和自动引用计数(ARC )兼容      仅需要少量代码

• 使用方法扩展功能,在AppDelegate中中定义

@财产 强大的 非原子 只读CMMotionManager * sharedMotionManger; !

调整代码

• 的AppDelegate 中获得共享运动管理器

1, 获得AppDelegate中的引用

通过AppDelegate中的引用获得其中只读的 sharedMotionManager 对象引用

回顾

  • • 使用加速计可以测量设备在 Ÿ Ž 三个轴上的加速度
  • • 利用加速计可以设计制作出用户交互体感非常优秀的游戏
    作品!
  • • UIAccelerometer 由于重力分量的干扰已经被苹果废弃,不过由于其使用简单,目前还有不少游戏作品中使用这一技术
  • • CoreMotion 是苹果公司针对运动特性新推出的一套框架,经过巧妙的构思可以非常优秀的作品,而且很容易抓住用户的眼球
  • • 使用 CoreMotion 开发的作品,通过苹果官方审批后,如果作品本身品质优秀,苹果官方很有可能会协助开发者一起推广!

© chenyilong。本站由Postach.io

 

 

 

 

 

 

posted @ 2014-03-07 21:36  iTeaTime(技术清谈)  阅读(646)  评论(0编辑  收藏  举报