•通过iOS设备提供的内置的加速计,可以确定设备什么时候移动、移动了多少距离以及设备的方向
•在应用程序中,使用UIAccelerometer类来接收加速计数据,通过类方法sharedAccelerometer可以获得该类的实例
•使用加速计需要设置其更新间隔和代理,此后,在指定的时间间隔,会收到代理方法accelerometer:didAccelerate:的回调
•该代理方法收到一个指向加速计的指针和一个指向UIAcceleration对象的指针
•该加速对象包含:x,y,z和timestamp四个属性,其中x,y,z是设备在这三个方向上的重力加速度,单位g
![](https://i-blog.csdnimg.cn/blog_migrate/23dfb4bc8788fccf2ab3cc8e63608e6f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/844e536a594d354a5b3d726077a390f6.png)
Vt=V0+g * t 加速度是恒定的
Vt=V0+g+g+g+g…… 时间和加速度都是恒定的
手机上面,加速度不是恒定的,取决于我们晃动手机的倾斜度
Vt=V0+a1+a2+a3+a4…. 时间是恒定的,加速度会改变
–引入QuartzCore.framework方法
–定义CADisplayLink游戏时钟,并在游戏时钟指定的更新方法中更新小球视图位置
效果自己去真机测试
•加速计使用步骤
–1. 获取共享加速计对象
–2. 设置加速计数据更新频率
–3. 设置加速计对象代理
•让加速计负责速度更新,CADislpayLink负责界面更新的好处
–1. 游戏效果更加平滑
–2. 界面表示和游戏逻辑可以得到拆分,便于游戏扩展并引入MVC设计模式
–3. 使用时钟更新,需要注意小球位置的修正
•UIAccelerometer虽然已经停止更新,但是目前还是有一定数量的应用中使用到了该技术
![](https://i-blog.csdnimg.cn/blog_migrate/7dcd58fa2ad8d3092dad48108f79577a.png)
代理方法
![](https://i-blog.csdnimg.cn/blog_migrate/f73aa1530b8b5a7fa94c9f3ab6adef9b.png)
碰撞检测
![](https://i-blog.csdnimg.cn/blog_migrate/d2aaf92f38dd52715f4425bebe3a3036.png)
•在iOS4之前,加速度计由UIAccelerometer类来负责采集工作,而电子罗盘则由Core Location接管
•随着iPhone4的推出,由于加速度计的升级以及陀螺仪的引入,与Motion相关的编程成为重头戏,所以,苹果在iOS4中增加了一个专门负责该方面处理的框架——Core Motion Framework
•Core Motion不仅能够提供实时的加速度值和旋转速度值,更重要的是,苹果在其中集成了很多算法,可以直接输出把重力加速度分量剥离的加速度,省去你的高通滤波操作,以及提供给你一个专门的设备的三维attitude信息
Core
Motion
框架结构示意图
——
MotionManager
![](https://i-blog.csdnimg.cn/blog_migrate/576f23f3b7a5a4d5c0e48677a0f2c00b.png)
•Push(采集所有数据——做运动仿真更好)
Pull(在需要是获取采样数据)
![](https://i-blog.csdnimg.cn/blog_migrate/828d66214ebacdc242cba720a0915bbe.png)
•使用加速计可以测量设备在x,y,z三个轴上的加速度
•利用加速计可以设计制作出用户交互体感非常优秀的游戏作品!
•UIAccelerometer由于重力分量的干扰已经被苹果废弃,不过由于其使用简单,目前还有不少游戏作品中使用这一技术
•CoreMotion是苹果公司针对运动特性新推出的一套框架,经过巧妙的构思可以非常优秀的作品,而且很容易抓住用户的眼球
使用CoreMotion开发的作品,通过苹果官方审批后,如果作品本身品质优秀,苹果官方很有可能会协助开发者一起推广