0

別のクラスのメソッドの戻り値をチェックするために、Androidスレッドでチェックを実行したいと思います。これまでの私のコードは次のとおりです。

public class HelloWorldAndroid extends AndroidApplication {

    private MyGame myGame;

@Override
public void onCreate (Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

            **********Other lines Omitted***********

    myGame = new MyGame(false, 30, new AndroidLeaderboard());


            //check to see if the game is over
    Thread background = new Thread(new Runnable() {

        @Override
        public void run() {
            if (myGame.gameOver()) {


                //if the game is over go to another screen
                startActivity(new Intent(HelloWorldAndroid.this, MainActivity.class));

            }
        }

    });
            background.start();
      }

ハンドラーを使用してこれを実装しようとしましたが、チェックが実行されないため、値がtrueの場合でも実行されます。このスレッドの実行中に継続的にチェックを実行する方法を知っている人はいますかmyGame.gameOver() = true(別のアクティビティに進むことができます)。

これについて何日も頭を悩ませてきましたが、まだ何もありません:Sどんなアイデアでも大歓迎です。

4

2 に答える 2

4

ある種の Listener (インターフェース) を作成してみませんか?

小さくて基本的な例、

myGame = new MyGame(false, 30, new AndroidLeaderboard());
myGame.setGameOverListener(this);

注:メソッドは必要ありませんsetGameOverListener。コンストラクターをリスナー引数を持つように変更することもできます。

リスナーは次のようになります。

interface GameOverListener {
    abstract public void notifyGameOver();
}

MyGame オブジェクト内にメソッドを作成します。

setGameOverListener(GameOverListener gol){
    this.gol = gol;
}

そして、アクティビティはそのリスナーを実装し、notifyGameOver()メソッドでアクティビティを開きます。

このような:

public void notifyGameOver(){
    startActivity(new Intent(HelloWorldAndroid.this, MainActivity.class));
}

ゲームが終了したことを通知するには、MyGame オブジェクトでnotifyGameOver()メソッドを呼び出します。

gol.notifyGameOver();
于 2012-10-17T19:17:40.207 に答える
3

これは私には非常に悪い設計のようです。代わりに、OnGameOverListener1 つのメソッドを持つインターフェイスを作成することをお勧めしますonGameOver()MyGameクラスには、クライアントが設定できるこのインターフェイスのインスタンスがあります。その後、MyGameゲームが終了したとクラスが判断すると、クラスは呼び出すことができますonGameOver()

オブザーバーパターンを見てください

于 2012-10-17T19:17:25.263 に答える