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