1

すべての更新とレンダリングが毎秒 30 回行われるメイン ゲーム ループ (NSTimer) と、加速度計デリゲートを毎秒 100 回呼び出す「スレッド」です。加速度計のデリゲート関数で更新され、ゲーム ループで使用される変数「xPosition」があります。2 つの「スレッド」が xPosition を同時に使用しようとする可能性はありますか (そのため、クラッシュやその他の問題が発生します)。もしそうなら、ゲームのパフォーマンスへの影響を最小限に抑えてこれを修正するにはどうすればよいですか?

私はこのセットアップを何ヶ月にもわたる開発と増分テストに使用してきましたが、問題に遭遇したことはありません.

乾杯!

4

2 に答える 2

2

タスクとゲーム ループの両方がメイン スレッドから実行される場合NSTimer、同時に実行されるのはそのうちの 1 つだけなので、問題は発生しません。さらに、それらのどれも他のものを先取りすることはできません。

ただし、別のスレッドを使用している場合は、プロセッサが 1 つしかない場合でも、ゲーム ループ内で を使用するときに注意する必要があります。これはxPosition、その値が他のスレッドからいつでも更新される可能性があるためです。これを回避する簡単な方法の 1 つxPositionは、ゲーム ループ内のローカル変数に の値を代入し、ループを実行するたびにこの変数のみを参照することです。

于 2010-05-09T11:03:50.947 に答える
1

加速度計スレッドでのみ更新される場合は、それほど問題はありません。最悪のケースは、レンダリング スレッドが加速度計スレッドによるデータの変更を認識しないことです。単一のプロセッサで実行しているため、それは起こりそうにありません。後者の問題は、ソース コードで変数に「揮発性」のフラグを付けると対処できます。

于 2010-05-09T06:29:18.747 に答える