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

iOS中的主要传感器 • 接近传感器
• 加速度传感器--又称加速计
- 由于更够带来了更多的直觉游戏体验,基本姿态识别和环境
感知功能,目前在智能手机上应用的非常广泛
- 目前智能手机中基本配备的都是三维线传感器,也就是说,
用来测量x,y,z三个轴上的加速度
- 由于重力分量的干扰,无法仅仅依靠加速度传感器来检测加
速方向的角度,也无法得知手机本身的朝向
• 陀螺仪
- 造价昂贵,目前并未在智能手机中得到普及
- 基于角动量守恒理论,沿着某个特定的坐标轴测量旋转速率 - 误差会累积• 电子罗盘--又称磁力计,或电子指南针
iOS中的主要传感器
|
加速度传感器 |
电子罗盘 |
陀螺仪 |
接近传感器 |
|
|
功能 |
通过测量三个 轴的加速度大 小来判断人体 运动 |
通过测量设备 周围地磁场的 强度和方向来 判断朝向 |
通过测量三个 轴的旋转速率 来判断朝向 |
无须物理接触 就判断附近物 体的存在 |
|
主要局限性 |
受重力干扰大 瞬时误差大 |
误差大,容易 受其他磁场和 金属物体影响 主要用于校正 其他设备 |
误差会累积 长时间读数的 准确性差 |
不通用,大多 数只针对几种 材质 |
|
应用 |
活动测量 |
导航 |
导航 |
智能省电 |
,, 。
加速计
• 通过iOS设备提供的内置的加速计,可以确定设备什么时候移动、移 动了多少距离以及设备的方向
• 在应用程序中,使用UIAccelerometer类来接收加速计数据,通过类方 法sharedAccelerometer可以获得该类的实例
• 使用加速计需要设置其更新间隔和代理,此后,在指定的时间间隔, 会收到代理方法accelerometer:didAccelerate:的回调
• 该代理方法收到一个指向加速计的指针和一个指向UIAcceleration对象 的指针
• 该加速对象包含:x,y,z和timestamp四个属性,其中x,y,z是设备 在这三个方向上的重力加速度,单位g



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

加速计开发测试需要注意
• 加速计的应用只能在真机上开发测试
加速计演练
• 演练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

Core Motion获取数据的两种方式
• Push(采集所有数据--做运动仿真更好) • Pull(在需要是获取采样数据)

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






增加新的功能
• 点击屏幕停止或者启动加速计数据采集
使用dispatch_once创建MotionManager的单例
• 好处:
- 线程安全
- 很好满足静态分析器要求
- 和自动引用计数(ARC)兼容 - 仅需要少量代码
• 使用方法,在AppDelegate中定义
@property (strong, nonatomic, readonly)CMMotionManager *sharedMotionManger;!
调整代码
• 从AppDelegate中获得共享运动管理器
- 1. 获得AppDelegate的引用
- 2. 通过AppDelegate的引用获得其中只读的 sharedMotionManager对象引用
回顾
• 使用加速计可以测量设备在x,y,z三个轴上的加速度
• 利用加速计可以设计制作出用户交互体感非常优秀的游戏
作品!
• UIAccelerometer由于重力分量的干扰已经被苹果废弃,不 过由于其使用简单,目前还有不少游戏作品中使用这一技 术
• CoreMotion是苹果公司针对运动特性新推出的一套框架, 经过巧妙的构思可以非常优秀的作品,而且很容易抓住用 户的眼球
• 使用CoreMotion开发的作品,通过苹果官方审批后,如果 作品本身品质优秀,苹果官方很有可能会协助开发者一起 推广!
加速计 & CoreMotion的更多相关文章
- 传感器- 加速计 - CoreMotion
/** * CoreMotion * */ #import "ViewController.h" #import <CoreMotion/CoreMotion.h> ...
- CoreMotion(加速计)
加速计的作用 用于检测设备的运动(比如摇晃) 加速计的经典应用场景 摇一摇 计步器 ********************************** Core Motion获取数据的两种方式 pu ...
- iOS开发-CoreMotion框架(加速计和陀螺仪)
CoreMotion是一个专门处理Motion的框架,其中包含了两个部分加速度计和陀螺仪,在iOS4之前加速度计是由UIAccelerometer类来负责采集数据,现在一般都是用CoreMotion来 ...
- iFIERO - (二)宇宙大战 Space Battle -- SpriteKit 无限循环背景Endless、SpriteKit物理碰撞、CoreMotion加速计
本节主要讲解如何创建无限循环Endless的星空背景(如下图).玩家飞船发射子弹,监测子弹击外星敌机的SpriteKit物理碰撞并消灭敌机,以及应用iOS的CoreMotion加速计移动飞船躲避外星敌 ...
- iOS开发 传感器(加速计、摇一摇、计步器)
一.传感器 1.什么是传感器传感器是一种感应\检测周围环境的一种装置, 目前已经广泛应用于智能手机上 传感器的作用用于感应\检测设备周边的信息不同类型的传感器, 检测的信息也不一样 iPhone中的下 ...
- iOS开发——高级篇——传感器(加速计、摇一摇、计步器)
一.传感器 1.什么是传感器传感器是一种感应\检测周围环境的一种装置, 目前已经广泛应用于智能手机上 传感器的作用用于感应\检测设备周边的信息不同类型的传感器, 检测的信息也不一样 iPhone中的下 ...
- iOS新加速计事件(陀螺仪和加速计)
iOS新加速计事件 [iOS新加速计事件] 1.iOS5.0以前,可以使用UIAcceleration来监听加速计事件. 2.Bug iOS5.0以后,UIAccelerometerDelegate已 ...
- ios开发——实用技术篇Swift篇&加速计和陀螺仪
加速计和陀螺仪 //返回按钮事件 @IBAction func backButtonClick() { self.navigationController?.popViewControllerAnim ...
- 10 - 应用程序间通信、本地通知、加速计、URL传输中文
一.应用间通信 URL 调用系统服务: tel:11111 sms:xxx@163.com http:// URL深入 类型://主机:端口/地址?参数 label框等于文字大小快捷键:command ...
随机推荐
- 现已告别五险一金?迎来社保商保时代保险INSURAUNCE
现已告别五险一金?迎来社保商保时代保险INSURAUNCE 经济工作会议提出,中国要降低社会保险费,研究精简归并"五险一金",可以说是为社保变革指明了大方向.未来,生育保险将与基本 ...
- Bitcoin区块验证
目录 区块的生成 区块的验证链接 验证过程 Merkle Tree结构 区块的生成 矿工在挖矿前要组建区块 将coinbase交易打包进区块 将交易池中高优先级的交易打包进区块 优先级 = 交易的额度 ...
- 理解以太坊的Layer 2扩容解决方案:状态通道(State Channels)、Plasma 和 Truebit
-宾夕法尼亚州的尼科尔森大桥建设照片(图源).罗马人的工程原理扩展至新的应用 对于以太坊来说,2018年是专注底层架构之年.今年很多早期参与者会测试网络极限,并且重新关注以太坊的扩容技术. 以太坊仍然 ...
- CentOS 7 Apache服务的安装与配置
原文出处:http://blog.51cto.com/13525470/2070375 一.Apache简介 Apache 是一个知名的开源Web服务器.早期的Apache服务器由Apache Gro ...
- mysql 查询所有子节点的相关数据
定义一个函数 ) CHARSET utf8 BEGIN ); ); SET sTemp = '$'; SET sTempChd =cast(rootId as CHAR); WHILE sTempCh ...
- M1阶段事后分析
M1阶段的开发结束了,在周四的课上我们组也进行了alpha阶段的汇报.我们的努力得到了应有的回报,下面我们将针对M1阶段产生的一些问题进行分析和反思. 一.设想和目标 1.我们的app更像是一款针对北 ...
- 格式化输出Json对象
1.调用方式: alert(JsonUti.convertToString(jsonObj)); //jsonObj为json对象. 2.格式化输出Json对象方法定义: var JsonUti = ...
- [转帖]Linux后端执行命令的方法
Linux 后台执行命令的方法 http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4241330&fromuid=212883 ...
- hexo d 报错‘fatal: could not read Username for 'https://github.com': No error’
问题描述 今天早上,一如往常的往在github上创建的hexo博客上传文章,结果报错 'fatal: could not read Username for 'https://github.com': ...
- Spring之c3p0连接池配置和使用
1.导入包:c3p0和mchange包 2.代码实现方式: package helloworld.pools; import com.mchange.v2.c3p0.ComboPooledDataSo ...