私のアプリでは、加速度計を使用してゲーム内のキャラクターを制御しています。現在、縦向きのみを許可しているため、ユーザーはキャラクターを移動するためにデバイスを右または左に傾ける必要があります。それは今のところうまくいっています。私が今達成しようとしているのは、ユーザーがプレイしている現在の傾きを考慮して加速度計を「調整」することです。ユーザーが横になっているとしましょう。開始点が考慮されていないため、値が歪んでしまい、キャラクターを制御できなくなります。そのため、最初の傾斜量を考慮してから、ゲーム中にそれを考慮しようとしていますが、機能していません。
そのため、ゲーム以外のビューに加速度計を「調整」するためのボタンがあり、これが実行するコードです。
これはIBActionにあります
[[UIAccelerometer sharedAccelerometer] setUpdateInterval:1.0f/30.0f];
[[UIAccelerometer sharedAccelerometer] setDelegate:self];
これは加速度計のデリゲート呼び出しです
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
[[NSUserDefaults standardUserDefaults] setFloat:acceleration.x forKey:@"X-Calibrate"];
[[UIAccelerometer sharedAccelerometer] setDelegate:nil];
}
次に、init のゲーム ビューで、iVar calibrationFloat を NSUserDefaults で設定した値に設定します。次に、小さなジッターを取り除くための kFilteringFactor もあります。これは、rollingX をすべてに等しく設定し、rollingX に基づいてキャラクターを移動するゲームの加速度計デリゲート メソッドです。
- (void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
rollingX = ((acceleration.x - calibrationFloat) * kFilteringFactor) + (rollingX * (1.0 - kFilteringFactor));
}
ただし、これは機能していません。キャリブレーションは何もしていないようで、その理由はわかりません。これが機能しない理由を設定した人はいますか?