2011-12-03 6 views
0

私のゲームで私の主人公はCCSpriteです。そのCCSpriteはUIAccelerometerのコントローラーですが、私はself.isAccelerometerEnabled = YES;を実行して加速度計のメソッドを有効にしてからupdateInterval1/30に設定しました。CCSpriteはUIAccelerometerを使って十分に速く再描画できないのですか?

問題は加速値が実際の値ではなく、CCSpriteで十分に高速で再描画されないという問題です。だから、私のCCSpriteが0.1秒ごとに多くのピクセルを動かすと、スプライトがちらつき始め、速くなるとちらつきが増します。

自分の.hでアクセラレーション値を宣言し、Accelerometerデリゲートメソッドで設定した後、ゲームループでCCSpriteの位置を設定しました。

これはなぜ起こっているのでしょうか?

ありがとうございます!

編集は:加速度コード:

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

答えて

2

スプライトをちらつきがどこかのバグを示します。あなたがスプライトがそれに対して幾分「動揺」な動作をしているということを意味しない限り。まだ入力していない場合は、accelerometer filteringを追加して、加速度計の入力値を平滑化してください。

Btw、Kobold2Dは、既に組み込まれている最も一般的に使用されるaccelerometer filtering(高および低パス)を有する。

+0

私はすでにハイパスフィルタを実装しています!私のedit1を見てください。これは他の場所ではバグではありませんが、私のスプライトが何をするのかは分かりません!私のフィルター値は0.2btwです。 –

+0

これはローパスフィルタで、突然の動きを滑らかにするための正しいフィルタタイプです。しかし、結果の値に50を掛けることで目的を破ることができます。これにより残りの分散は50倍に拡大されます。加速度の値が-1から+1までで、フィルタリングが値の範囲を変更しない場合、加速度計で制御されるスプライトは、最も極端な状況では1つのフレームで最大50ピクセルまで移動できます。次のコメントのもう一つの手がかり...。 – LearnCocos2D

+0

加速度計のupdateIntervalは30フレームです。 30 fpsでゲームをロックしない限り、2番目のフレームごとに新しい加速値が得られることを意味します。他のフレームでは、スプライトの位置を変更したり、rollingXを変更するコードを実行していると思います。たとえば、加速度計はスプライトに+ 25ピクセル右に移動するよう指示します。次のフレームでは、スプライトを-20ピクセル左に移動し、フレームごとにそれを繰り返すと、より速い加速度値をよりちらつくちらつきのスプライトになります。 。 – LearnCocos2D

1

加速度計のメソッドではなく、更新メソッドでスプライトの位置を更新する必要があります。 (まだお持ちでない場合)

+0

それは私がやったことです –

関連する問題