1

私は、加速度計を使用してキャラクターを制御するゲームに取り組んでいます。私の問題はこれです:OnSensorChanged()内でアクセスできないクラスとメソッドでセンサーが受け取った値を使用する必要があります。OnSensorChanged内からコールバックを実装する必要があると思いますが、その方法がわかりません。誰かが私を助けることができますか?

4

1 に答える 1

0

この投稿( Androidでコールバックを定義する方法? )の答えがあなたを助けると信じています。

要約すると、コールバックインターフェイスを作成します。

// The callback interface
interface MyCallback {
    void callbackCall(SensorEvent event);
}

計算を行うことになっているクラスにコールバックインターフェイスを実装します。

class Callback implements MyCallback {
    void callbackCall(SensorEvent event) {
       // callback code goes here
    }
}

onSensoreChanged()があるアクティビティから呼び出しを行います。

// The class that takes the callback
class Worker extends Activity implements SensorEventListener {
    MyCallback callback;

    public void onSensorChanged(SensorEvent event) {

      callback.callbackCall(event);
   }
}

これがお役に立てば幸いです。

アップデート:

プロセスとスレッドについてはすでにご存知だと思います(そうでない場合は、プロセスとスレッドに関するAndroidのドキュメントをご覧ください)。

onSensorChangedメソッドはI/Oであり、(メインUIスレッドではなく)別のスレッドでI/O操作を実行することをお勧めします。

コールバックメソッドが呼び出されると、イベントを別の変数に格納し、そのクラスでそれらのローカル変数を使用できます。

ゲームを作成しているため、アプリですべてのイベントが必要になることはほとんどありません。したがって、アプリがゲームのデータの計算でビジー状態になっている間は、他のイベントをドロップできます。これを行うには、「ビジー」フラグ(ブール値)を設定し、このifブロック内に計算用のコードを含めます。

    void callbackCall(SensorEvent event) {
        if (!busy) {
            // Set the busy flag to block other event changes
            busy = true;
            // callback code goes here

            // Once finished, reset the busy flag to allow other events to come in
            busy = false;
        }
    }
于 2013-03-10T20:57:34.767 に答える