我从用户那里得到反馈,“有时”我的Game-App存在一个错误,那就是飞船完全无法控制。在对此进行调查之后,CoreMotion报告的态度看起来很快就消失了(不到一秒钟),并且突然之间做到了。您最多可以玩5分钟,然后突然发生了飞船移动到屏幕边界之一并且不再移动到该点的情况。
我的问题:有人对CoreMotion的态度有过相同的经历吗?您有什么方法或想法来控制这种突然的大量漂移?
我用来在SpriteKit的update()
中表示态度的代码是:
if let motion = motionManager.deviceMotion {
let x = CGFloat(motion.attitude.yaw - basePosition.x)
let y = CGFloat(motion.attitude.roll - basePosition.y)
ship.physicsBody?.applyImpulse(CGVectorMake(X_SENSITITVITY * x, Y_SENSITITVITY * y))
}
其中
basePosition
,X_SENSITITVITY
,Y_SENSITITVITY
是游戏中的常量值。motionManager
由类顶部的private var motionManager = CMMotionManager()
定义。据我了解的文档,
deviceMotion
使用重力和姿态测量的组合以某种方式最大程度地减少了长期漂移。可能还需要注意的重要一点:当游戏在安静的环境中运行而没有汽车等振动时,它可以完美运行。
我想让人们在需要休息时玩游戏,例如长途火车或飞机上的休息,或坐在汽车后座的孩子。
最佳答案
我发现了同样的漂移问题。我将CMDeviceMotion的态度与CLLocation的magneticHeading进行了比较。为此,我绕着一张小桌子走了10次,每轮之后将设备放在完全相同的地方。
我发现,DeviceMotion的姿态每轮漂移约30度。因此,经过10个回合后,姿态偏离了大约300度。
根据Apple的WWDC 2012演讲“ Session 524:了解核心运动”,所使用的传感器融合取决于指定的参考系。 Phil Adam提到,如果指定了xArbitraryCorrected参考系,则传感器融合算法也将使用磁力计。我对xArbitrary,xArbitraryCorrected和xMagneticNorth进行了相同的测试,但是没有区别。指南针的不确定性约为2-3度(航向过滤器为1.0度)。
也许这是个错误,我不知道。但我期望xArbitrary和xArbitraryCorrected之间至少会有区别。
关于ios - iOS核心 Action 在汽车,火车,航类中漂移,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27857047/