0

私は簡単な傾斜ゲームを書いています。端末を傾けた方向にボールを画面上で転がします。

そこで、センサー データを取得する方法の例をダウンロードしましたが、これは正常に機能します (オイラー角の問題を回避するために回転行列を使用しています)。しかし、それをより大きなアプリに入れようとしたところ、うまく動作しませんでした。

私の最初のアイデアは、傾斜センサーを別のスレッドで実行することでしたが、私のクラス: public class TiltSensor extends Thread implements SensorEventListener がうまく機能していません。1 ラウンドの値を取得すると、停止します。

このアプリをどのように実装しますか?

UI スレッドをブロックしたくないので、ゲームを実行するには別のスレッド (GameHandler) が必要だと考えてから、runOnUithread を呼び出して、そこからビューを無効にします。また、ボードの表現をビューから分離して、画面をマトリックスとして表現し、ビューはそのマトリックスを使用して画面がどのように見えるかを認識します。しかし、TiltSensor を実装する最善の方法がわかりません。別のスレッドで実行する必要がありますか、それとも GameHandler と同じスレッドで実行する必要がありますか? SensorManager が実際に GameHandler スレッドで onSensorChanged を呼び出していることを確認するにはどうすればよいですか?

4

1 に答える 1

1

私の謙虚な経験では、次のことを行う必要があります。

A) SensorListener を通常どおりメイン スレッドに登録しますが、コンストラクターで 2 つの (または必要に応じて) WorkerThreads を生成します。

B) 両方のスレッドのルーパー参照を取得して、将来の要求を待機するようにそれらを維持します。

B) メイン スレッドで onSensorChanged を通常どおりリッスンしますが、それ以外は何も行わず (これは重要です)、ゲーム ロジックを処理する新しい実行可能なオブジェクトに値のコピーを委任します。

C) それに応じて、WorkerThread ルーパー参照で新しい実行可能なオブジェクトをキューに入れます。

D) ランナブル (既にメイン スレッドから離れている) に必要なことを実行させ、ビューの更新に関心のある人が参照できる可能性のあるシングルトンに変更を同期させます。

于 2013-10-08T22:01:47.883 に答える