?通过iOS设备提供的内置的加速计,可以确定设备什么时候移动、移动了多少距离以及设备的方向
?在应用程序中,使用UIAccelerometer类来接收加速计数据,通过类方法sharedAccelerometer可以获得该类的实例
?使用加速计需要设置其更新间隔和代理,此后,在指定的时间间隔,会收到代理方法accelerometer:didAccelerate:的回调
?该代理方法收到一个指向加速计的指针和一个指向UIAcceleration对象的指针
?该加速对象包含:x,y,z和timestamp四个属性,其中x,y,z是设备在这三个方向上的重力加速度,单位g
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虽然已经停止更新,但是目前还是有一定数量的应用中使用到了该技术
代理方法
碰撞检测
?在iOS4之前,加速度计由UIAccelerometer类来负责采集工作,而电子罗盘则由Core Location接管
?随着iPhone4的推出,由于加速度计的升级以及陀螺仪的引入,与Motion相关的编程成为重头戏,所以,苹果在iOS4中增加了一个专门负责该方面处理的框架——Core
Motion Framework
?Core
Motion不仅能够提供实时的加速度值和旋转速度值,更重要的是,苹果在其中集成了很多算法,可以直接输出把重力加速度分量剥离的加速度,省去你的高通滤波操作,以及提供给你一个专门的设备的三维attitude信息
CoreMotion框架结构示意图——MotionManager
?Push(采集所有数据——做运动仿真更好)
Pull(在需要是获取采样数据)
?使用加速计可以测量设备在x,y,z三个轴上的加速度
?利用加速计可以设计制作出用户交互体感非常优秀的游戏作品!
?UIAccelerometer由于重力分量的干扰已经被苹果废弃,不过由于其使用简单,目前还有不少游戏作品中使用这一技术
?CoreMotion是苹果公司针对运动特性新推出的一套框架,经过巧妙的构思可以非常优秀的作品,而且很容易抓住用户的眼球
使用CoreMotion开发的作品,通过苹果官方审批后,如果作品本身品质优秀,苹果官方很有可能会协助开发者一起推广
iOS内置加速计(UIAccelerometer/CoreMotion),布布扣,bubuko.com
iOS内置加速计(UIAccelerometer/CoreMotion)
原文:http://www.cnblogs.com/BinShao/p/3574267.html