有没有办法在iOS设备上更改加速计参考

时间:2016-01-28 03:07:12

标签: ios swift sprite-kit core-motion

我正在开发一款SpriteKit游戏,该游戏使用CMMotionManager根据加速度计和陀螺仪数据移动对象。目前,如果我测试应用程序并且在我坐下或站立时我的设备平放在手中,它的效果很好。然而,如果一个人正在铺设,那么设备不是平坦的,而是从一开始就在x轴(横向模式)上倾斜,物体移动到底部,因为参考距离很远,所以没有办法移动对象并玩游戏。所以我很好奇如果可能的话,检测到设备没有平放并相应地调整加速度计/陀螺仪参考点。

1 个答案:

答案 0 :(得分:0)

您可以在开始时存储态度的副本,稍后将其用作参考来计算运动:

class MotionManagerSingleton {

    let motionManager = CMMotionManager()
    var referenceAttitude: CMAttitude?

    override init()  {
         motionManager = CMMotionManager()
         motionManager.deviceMotionUpdateInterval = 0.25
         motionManager.startDeviceMotionUpdates()
         calibrate()
    }

    func calibrate() {
        referenceAttitude = motionManager.deviceMotion?.attitude.copy() as? CMAttitude
    }

    func getMotionVector() -> CGVector {
        // Motion
        let attitude = motionManager.deviceMotion?.attitude;

        // Use start orientation to calibrate
        attitude!.multiplyByInverseOfAttitude(sharedInstance.referenceAttitude!)

        return CGVector(dx: attitude!.pitch, dy: attitude!.roll)
    }
}