2012-05-07 5 views
0

Android OSで2Dゲームをデザインして開発するためのベストプラクティスに関する質問があります。 Lunar Landerの例の後、UIスレッドをブロックしないように別のスレッドでゲームを実行しています。しかし、ある波がゲームで終わると、その波のスコア、ボーナスを表示する画面を表示したいと思います。私は別のアクティビティとして、startActivityForResult()を最後に呼び出して考えていました。流行。私がメインスレッドにないので、これを行う最善の方法は何ですか?そしてこれは良い習慣とみなされるだろうか?Android Game Thread Advice

ありがとうございます!

答えて

1

メインのUIスレッドにHandlerを作成します。波が終了するというメッセージを処理させます。ゲームスレッドでは、HandlerHandler.sendMessage(WAVE_END).sendToTarget()を呼び出して、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つの整数引数とオブジェクトを渡すこともできます。それはオブジェクトに含まれます。

0

Thisあなたの状況に役立つ回答があります。要するに、startActivityForResultは同期式なので、サービスを一時停止しても構わない場合は動作します。それ以外の場合は、スコアアクティビティでサービスにコールバックします。