zoukankan      html  css  js  c++  java
  • 加速计

    加速计(图片版)




















    加速计和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

     


    作者:
    出处:http://www.cnblogs.com/ChenYilong/(点击RSS订阅)
    本文版权归作者和博客园共有,欢迎转载,
    但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    低水平博士是提升科研生涯的毒药
    MATLAB——axis
    MATLAB——PLOT绘图
    漫谈正态分布的生成
    一位创业者创业失败后,成功的做了一个创业孵化器!
    iOS 使用Method Swizzling隐藏Status Bar
    翻转View
    【iOS】Plist-XML-JSON数据解析
    Android流式布局实现
    S3C2416裸机开发系列十六_sd卡驱动实现
  • 原文地址:https://www.cnblogs.com/ChenYilong/p/3587229.html
Copyright © 2011-2022 走看看