0

ViewAから調整しようとしていますUIAccelerometerが、ゲームビューはViewBです。ですから、私が達成したいことのほとんどは、ユーザーが自分の側で遊んでいると言うことです。私は、通常の姿勢で座っているときに遊んでいるかのようにゲームを動作させたいと考えています。

それで、ViewAで私はそのようなことをしますか?:

float accelX = (acceleration.x - [[NSUserDefaults standardUserDefaults] floatForKey:@"value1"]);
[[NSUserDefaults standardUserDefaults] setFloat:accelX forKey:@"value1"];

次に、ゲームクラスで、UIAccelerometerデリゲートメソッドでこれを実行しますか?:

float accelX = (acceleration.x - [[NSUserDefaults standardUserDefaults] floatForKey:@"X-Calibrate"]);
//Low Pass Filter
rollingX = (accelX * kFilteringFactor) + (rollingX * (1.0 - kFilteringFactor));
    AccelPoint.x += (rollingX*50);

それから私は次のようなことをします:

mySprite.position = ccp(accelX, yValue);

私は何か間違ったことをしていますか?

ありがとう!

編集:ViewBの新しいコードですが、今でも何らかの摩擦が必要ですか?

    rollingX = (acceleration.x * kFilteringFactor) + (rollingX * (1.0 - kFilteringFactor));     

AccelPoint.x += (rollingX*50);

次に、そのコードの後で、オブジェクトの位置を設定します。

4

1 に答える 1

1

この質問の例は、あなたが説明したのと同様の方法でキャリブレーションしているように見えます:加速度計とキャリブレーション-iPhone SDK

ビューAのサンプルコード:

float accelX = (acceleration.x - [[NSUserDefaults standardUserDefaults] floatForKey:@"value1"]);

[[NSUserDefaults standardUserDefaults] setFloat:accelX forKey:@ "value1"];

これにより、事前に調整された値が保存されます。したがって、以前にキャリブレーションを行ったことがあれば、キャリブレーションの影響は最小限に抑えられます。

私はちょうど思う:

[[NSUserDefaults standardUserDefaults] setFloat:acceleration.x forKey:@"value1"];

あなたが求めているものはもっとあるかもしれません。このようにして、ユーザーの開始位置での重力の影響全体を取り除くことができます。

ビューBのコードは問題ないようですが、これによりキャラクターの速度が無期限に向上することを覚えておいてください。何らかの形の摩擦を追加することを検討してください。

于 2011-12-01T14:03:25.017 に答える