加速计 & 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 ...
随机推荐
- PAT甲题题解-1091. Acute Stroke (30)-BFS
题意:给定三维数组,0表示正常,1表示有肿瘤块,肿瘤块的区域>=t才算是肿瘤,求所有肿瘤块的体积和 这道题一开始就想到了dfs或者bfs,但当时看数据量挺大的,以为会导致栈溢出,所以并没有立刻写 ...
- LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS
LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163. ...
- POI操作Excel(xls、xlsx)
阿帕奇官网:http://poi.apache.org/ POI3.17下载:http://poi.apache.org/download.html#POI-3.17 POI操作Excel教程(易百教 ...
- [2017BUAA软工]结对项目-数独程序扩展
零.github地址 GitHub地址:https://github.com/Liu-SD/SudoCmd (这个地址是命令行模式数独的仓库,包含了用作测试的BIN.DLL核心计算模块地址是:http ...
- Xdebug原理
前言: 前面一篇博文记录了Xdebug的安装配置.配置使用起来相对简单易懂,那么Xdebug的实现原理又是如何呢?所以就找了些资料来理解下其中的原理. 内容: Xdebug工作原理 1,IDE(如Ph ...
- node之post提交上传
post文件上传 multer 中间件 在node中 express为了性能考虑采用按需加载的方式,引入各种中间件来完成需求, 平时解析post上传数据时候,是用body-parse.但这个中间件有缺 ...
- django学习--2 模板
Django 模板 在上一章节中我们使用 django.http.HttpResponse() 来输出 "Hello World!".该方式将数据与视图混合在一起,不符合 Djan ...
- OneZero第四周第四次站立会议(2016.4.14)
1. 时间: 15:00--15:10 共计10分钟. 2. 成员: X 夏一鸣 * 组长 (博客:http://www.cnblogs.com/xiaym896/), G 郭又铭 (博客:http ...
- linux虚拟机安装中出现的问题
当虚拟机加载镜像时,出现下面的错误: vmware 已将该虚拟机配置为使用 64 位客户机操作系统.但是,无法执行 64 位操作. 错误提示:已将该虚拟机配置为使用 64 位客户机操作系统.但是,无法 ...
- 学习 TTreeView [1] - TTreeNodes、TTreeNode 与 Items、Items.Count、Items.Clear
填写 TTreeView 的内容一般是这样开始的(下图), 不过我觉得最好习惯用动态建立. 打个比方: 譬如 TreeView 是一个军营的"营部"! 这里会有营长.连长.排长.班 ...