加速计 & CoreMotion 加速计 & CoreMotion



加速计 & CoreMotion

加速计 & CoreMotion
加速计 & CoreMotion 加速计 & CoreMotion
加速计 & CoreMotion

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

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

  • -   由于更够带来了更多的直觉游戏体验,基本姿态识别和环境

     感知功能,目前在智能手机上应用的非常广泛 
  • -   目前智能手机中基本配备的都是三维线传感器,也就是说,

    用来测量x,y,z三个轴上的加速度

  • -   由于重力分量的干扰,无法仅仅依靠加速度传感器来检测加

     速方向的角度,也无法得知手机本身的朝向 

     陀螺仪
    - 造价昂贵,目前并未在智能手机中得到普及
    - 基于角动量守恒理论,沿着某个特定的坐标轴测量旋转速率 - 误差会累积

     电子罗盘--又称磁力计,或电子指南针

iOS中的主要传感器

 

加速度传感器

电子罗盘

陀螺仪

接近传感器

功能

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

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

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

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

主要局限性

受重力干扰大 瞬时误差大

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

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

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

应用

活动测量

导航

导航

智能省电

,, 。

加速计

  •    通过iOS设备提供的内置的加速计,可以确定设备什么时候移动、移 动了多少距离以及设备的方向

  •    在应用程序中,使用UIAccelerometer类来接收加速计数据,通过类方 法sharedAccelerometer可以获得该类的实例

  •    使用加速计需要设置其更新间隔和代理,此后,在指定的时间间隔, 会收到代理方法accelerometer:didAccelerate:的回调

  •    该代理方法收到一个指向加速计的指针和一个指向UIAcceleration对象 的指针

  •    该加速对象包含:x,y,ztimestamp四个属性,其中x,y,z是设备 在这三个方向上的重力加速度,单位g

加速计 & CoreMotion
加速计 & CoreMotion加速计 & CoreMotion
加速计 & CoreMotion加速计 & CoreMotion
加速计 & CoreMotion

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

加速计 & CoreMotion
加速计 & CoreMotion

加速计开发测试需要注意

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

加速计演练

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

效果  演练2

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

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

加速计演练小结

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

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

  • -   1. 游戏效果更加平滑

  • -   2. 界面表示和游戏逻辑可以得到拆分,便于游戏扩展并引入 MVC设计模式

  • -   3. 使用时钟更新,需要注意小球位置的修正

     UIAccelerometer虽然已经停止更新,但是目前还是有一定数量 的应用中使用到了该技术

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

罗盘则由Core Location接管

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

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

Core Motion框架结构示意图--MotionManager

加速计 & CoreMotion
加速计 & CoreMotion

Core Motion获取数据的两种方式

 Push(采集所有数据--做运动仿真更好)  Pull(在需要是获取采样数据)

加速计 & CoreMotion
加速计 & CoreMotion

Core Motion Push演练

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

加速计 & CoreMotion
加速计 & CoreMotion加速计 & CoreMotion
加速计 & CoreMotion加速计 & CoreMotion
加速计 & CoreMotion
加速计 & CoreMotion
加速计 & CoreMotion加速计 & CoreMotion
加速计 & CoreMotion加速计 & CoreMotion
加速计 & CoreMotion

增加新的功能

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

使用dispatch_once创建MotionManager的单例

 好处:
- 线程安全

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

 使用方法,在AppDelegate中定义

@property (strong, nonatomic, readonly)CMMotionManager *sharedMotionManger;!

调整代码

 AppDelegate中获得共享运动管理器

- 1. 获得AppDelegate的引用

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

回顾

  •    使用加速计可以测量设备在x,y,z三个轴上的加速度

  •    利用加速计可以设计制作出用户交互体感非常优秀的游戏

    作品!

  •    UIAccelerometer由于重力分量的干扰已经被苹果废弃,不 过由于其使用简单,目前还有不少游戏作品中使用这一技 术

  •    CoreMotion是苹果公司针对运动特性新推出的一套框架, 经过巧妙的构思可以非常优秀的作品,而且很容易抓住用 户的眼球

  •    使用CoreMotion开发的作品,通过苹果官方审批后,如果 作品本身品质优秀,苹果官方很有可能会协助开发者一起 推广!

© chenyilong. Powered by Postach.io