0

Javaを使用してAndroidゲームを構築しようとしています(これは初めてなので、非常に新しいです)。ユーザーがメイン アクティビティからプレイしたいゲームを選択すると、GamePlay アクティビティ クラスが呼び出されます。このクラスでは、作成した GameBoard ビューを読み込んでから、ゲームが終了すると終了するループを実行しようとしています。これを行うためのいくつかの異なる方法(スレッド化を含む)を試しましたが、問題は、ループに入る前にビューがロードされないことです。黒い画面と無限ループになってしまいます。助言がありますか?

注: ボードには、d1 と d2 に値を正常に割り当てるクリック検出があります。

public class GamePlay extends Activity{

private Player P1;
private Player P2;
private GameBoard board;

private Player turn;
private boolean gameOver = false;
private Thread thread;

//Variables associated with turn
private Dot d1 = null;
private Dot d2 = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_game_play);

    Bundle extra = getIntent().getExtras();
    String type = extra.getString("GAME_TYPE");

    //Set up appropriate players
    if (type.equals(StartDB.ONE_PLAYER)){
        this.setTitle("One Player Dots And Boxes");
        String P1Name = "Person";
        P1 = new HumanPlayer(Color.RED, P1Name);
        P2 = new AIPlayer(Color.BLUE, "Computer");
    } else {
        this.setTitle("Two Player Dots And Boxes");
        String P1Name = "Player 1";
        String P2Name = "Player 2";
        P1 = new HumanPlayer(Color.RED, P1Name);
        P2 = new HumanPlayer(Color.BLUE, P2Name);
    }

    //Initialize turn to first player
    setTurn(P1);

    //Set up a game board
    board = new GameBoard(this, this);
    setContentView(board);
}


@Override
protected void onStart() {
    super.onStart();

    //Create turn thread and run it
    while (!gameOver){
        while(d2 == null){
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e){
                e.printStackTrace();
            }
        }
        System.out.println("Making a line");
        Line line = new Line(d1, d2);
        board.addLine(line);
        d1 = null;
        d2 = null;
        board.invalidate();
        //This was another attempt made:
        //try {
            //thread = new Thread(new GameLoop(this));
            //thread.start();
            //thread.join();
        //} catch (InterruptedException e) {
            //e.printStackTrace();
        //}
        checkGameOver();
    }

    System.out.println("Game Over");
}
4

1 に答える 1

0

これまでに見たことがない場合に備えて、最初にアクティビティ ライフサイクルのイメージを示します。私はそれが非常に便利だと思います:

アクティビティのライフサイクル

ゲームボードのコードを投稿できますか? エラーはそこにある可能性があります。

また、この回答で提案されているように、Activity_game_play xml に GameBoard クラスを追加してみてください: Add class to xml

于 2014-07-23T16:44:38.453 に答える