スプライトキットの基本を学ぶために、「大理石」の迷宮ゲームを作成しています。
ゲームの重力をデバイスの傾きにマッピングしたい。私はそれを行う方法を理解しようとしてきましたが、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) である必要がありますが、attitude.roll は -179 を返します。また、デバイスを垂直 (ポートレート モード) に保ち、デバイスを静止させたまま足をオンにすると、重力 (x: 0, y: 1) が維持されますが、x は Attitude.roll に基づいているため、変化し続けます。
これはどのように行うことができますか?