我正在构建一个“大理石”迷宫游戏以学习 spritekit 基础知识。
我想将游戏的重力映射到设备的倾斜度。我一直在试图弄清楚如何做到这一点,但我只能成功地映射 y 轴:
class func obtainGravity(motionManager: CMMotionManager) {
var vec = CGVectorMake(0, 0)
if let attitude = motionManager.deviceMotion?.attitude? {
let y = CGFloat(-attitude.pitch * 2 / M_PI) // This works, it returns 1/-1 when the device is vertical (1 when the home button is upside down)
let x = CGFloat(attitude.roll * 2 / M_PI) // This doesn't work
physicsWorld.gravity = CGVectorMake(x, y)
}
}
我可以映射使球“向上”或“向下”(相对于纵向模式)的 Y 轴,但是我不明白如何映射 X 轴(从设备侧面拉动)。
例如,当将设备平放在桌子上时 (x, y) 应该是 (0,0),当把它放在桌面屏幕向下时它也应该是 (0,0) 但是姿态.roll 返回 -179。此外,如果我保持设备垂直(在纵向模式下)并打开我的脚保持设备静止,重力应该保持(x:0,y:1)但是 x 继续变化,因为它基于姿态.roll
如何才能做到这一点?