0

Android OS で 2D ゲームを設計および開発するためのベスト プラクティスについて質問があります。Lunar Lander の例に従って、UI スレッドをブロックしないように別のスレッドでゲームを実行しています。ただし、ゲームで特定の「ウェーブ」が終了したら、そのウェーブのスコアを集計する画面を表示したり、ボーナスを表示したりしたいと考えていました。流行。私はメインスレッドにいないので、これを行う最善の方法は何ですか? そして、これは良い習慣と見なされますか?

ありがとう!

4

2 に答える 2

1

HandlerメインUIスレッドでを作成します。ウェーブが終了するというメッセージを処理するようにします。ゲームスレッドで、を呼び出しHandler.sendMessage(WAVE_END).sendToTarget()Handler、ウェーブが終了したことをUIスレッドに通知します。はHandler必要なコードを実行します。

例:

public int MSG_WAVE_END = 1;

private final Handler endWave = new Handler() {
  @Override
  public void handleMessage(Message msg) {
    if(msg.what == MSG_WAVE_END) { // the number is arbitrary. Traditionally a constant
       // Do what you want to do when a wave ends like startActivityForResult()
    }
  }
}

次に、ゲームスレッドで、ウェーブが終了したときにこれを呼び出します。

endWave.obtainMessage(MSG_WAVE_END).sendToTarget();

Handler基本的にコールバックとして機能します。スレッド間で「メッセージ」を安全に送信して、作成されたスレッドでコードを実行できます。必要に応じて、2つの整数引数と1つのオブジェクトを渡すこともできます。オブジェクトに含まれMessageます。

于 2012-05-07T19:10:17.890 に答える
0

これは、あなたの状況に役立つ答えになるかもしれません。つまり、startActivityForResult は同期的であるため、Service を一時停止してもかまわない場合は機能します。それ以外の場合は、スコア アクティビティがサービスにコールバックされるようにします。

于 2012-05-07T19:11:19.713 に答える