回転値にジャイロと加速度計の入力を考慮に入れたい場合は、モーションマネージャーのデバイス motionが必要なようです。ドキュメントによると:
CMDeviceMotion のインスタンスは、デバイスの姿勢、回転速度、および加速度の測定値をカプセル化します。
したがって、ジャイロ データを直接監視する代わりに、代わりにデバイスの動きを監視します。以下の例は、フレームごとにデバイスの動きを取得する方法を示しています。オブジェクトを直接印刷することにしましたCMAttitude
が、このオブジェクトから、デバイスのピッチ、ロール、およびヨー (およびその他) に直接アクセスできます。私が間違っていなければ、まさに探しているものです。 .
import SpriteKit
import CoreMotion
class GameScene: SKScene {
let motionManager = CMMotionManager()
override func didMoveToView(view: SKView) {
motionManager.deviceMotionUpdateInterval = 1.0 / 30.0
motionManager.startDeviceMotionUpdates()
}
override func willMoveFromView(view: SKView!) {
motionManager.stopDeviceMotionUpdates()
}
override func update(currentTime: CFTimeInterval) {
if let attitude = motionManager.deviceMotion?.attitude? {
println(attitude)
let y = CGFloat(-attitude.pitch * 2 / M_PI)
let x = CGFloat(-attitude.roll * 2 / M_PI)
}
}
}
Swift 2 を使用している場合は、以下に示すいくつかの小さな変更を行う必要があります。
class GameScene: SKScene {
let motionManager = CMMotionManager()
override func didMoveToView(view: SKView) {
motionManager.deviceMotionUpdateInterval = 1.0 / 30.0
motionManager.startDeviceMotionUpdates()
}
override func willMoveFromView(view: SKView) {
motionManager.stopDeviceMotionUpdates()
}
override func update(currentTime: CFTimeInterval) {
if let attitude = motionManager.deviceMotion?.attitude {
print(attitude)
let y = CGFloat(-attitude.pitch * 2 / M_PI)
let x = CGFloat(-attitude.roll * 2 / M_PI)
}
}
}
詳細については、この画像を参照してください。
