PhysicsWorld重力にマップデバイスの傾き?
-
26-12-2019 - |
質問
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軸をマッピングすることができ、それがボールを「up」または「下」にする(肖像モードを基準にして)x軸をマッピングする方法を理解していません(デバイスの側面から)。
例えばテーブル(X、Y)のデバイスを平らにするとき(0,0)、テーブルの画面に入れるときは(0,0)である必要があります。-179。また、機器を垂直にして(縦長のモードで)静止している場合は、重力を維持する必要があります(X:0、Y:1)。
これはどのように行うことができますか?
解決
最も直接的な方法は、デバイスの動きの更新ではなく、そこから重力ベクトルを直接読み取ることです - それは加速度計がキャプチャするものです。
悲しいことに私はSwift Smimpieですので、CMAccelerometerHandler
構造体を入手できるCMAccelerationData
と直接重力ベクトルを入手できます。適用する
if let data = motionManager.accelerometerData? {
vec = CGVectorMake(CGFloat(data.acceleration.x), CGFloat(data.acceleration.y))
}
. 所属していません StackOverflow