質問

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))
}
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top