Android OS で 2D ゲームを設計および開発するためのベスト プラクティスについて質問があります。Lunar Lander の例に従って、UI スレッドをブロックしないように別のスレッドでゲームを実行しています。ただし、ゲームで特定の「ウェーブ」が終了したら、そのウェーブのスコアを集計する画面を表示したり、ボーナスを表示したりしたいと考えていました。流行。私はメインスレッドにいないので、これを行う最善の方法は何ですか? そして、これは良い習慣と見なされますか?
ありがとう!
Android OS で 2D ゲームを設計および開発するためのベスト プラクティスについて質問があります。Lunar Lander の例に従って、UI スレッドをブロックしないように別のスレッドでゲームを実行しています。ただし、ゲームで特定の「ウェーブ」が終了したら、そのウェーブのスコアを集計する画面を表示したり、ボーナスを表示したりしたいと考えていました。流行。私はメインスレッドにいないので、これを行う最善の方法は何ですか? そして、これは良い習慣と見なされますか?
ありがとう!
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
ます。
これは、あなたの状況に役立つ答えになるかもしれません。つまり、startActivityForResult は同期的であるため、Service を一時停止してもかまわない場合は機能します。それ以外の場合は、スコア アクティビティがサービスにコールバックされるようにします。