私はAndroidでTic-Tac-Toeゲームを作っています。私のゲームはうまく走っていますが、私はそれに問題があります。ユーザーがタイルをタッチするとUIが更新され、ComputerPlay()
メソッドが呼び出されます。しかし、UIはComputerPlay()
メソッドが完了した後にのみ更新されます。私はどうやって、すみません、私の英語は悪く、答えを探す方法がわかりません。メソッドの開始前にAndroid UIが更新されていません
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (currentTurn == Constants.HUMAN && board.isEmptyCell(r, c)) {
//update the UI
v.setBackgroundResource(R.drawable.cell_touched);
}
return true;
case MotionEvent.ACTION_UP:
if (currentTurn == Constants.HUMAN && board.isEmptyCell(r, c)) {
//update the tile where user touched
v.setBackgroundResource(R.drawable.cell_normal);
board.makeMove(r, c, currentTurn, options.getHumanPiece());
if (board.checkWinner(currentTurn)) {//if user wins
win++;
tvWin.setText(String.format("Win: %d", win));
tvNotice.setText(R.string.winNotice);
} else if (board.isFull()) { //if draw
draw++;
tvDraw.setText(String.format("Draw: %d", draw));
tvNotice.setText(R.string.drawNotice);
} else {
// computer's turn
currentTurn = Constants.COMPUTER;
ComputerPlay();
}
}
return true;
}
return false;
}
以下のコードでは、ユーザーがタイルをタッチすると、まずUIを更新してゲームの状態を確認します。ゲームが終了していない場合は、方法ComputerPlay()
を呼び出します。しかし、問題は次のとおりです。ComputerPlay()
メソッドが完了した後、UIが実際に更新されます(コンピュータの最善の移動を検索するのに時間がかかります)。 ComputerPlay()
メソッドの開始前にUIを更新したい。これどうやってするの?
ビューに変更を加えた後に 'v.invalidate()'を呼び出すだけです。 – NSimon
@Nicolas Simon:私は 'v.setBackgroundResource(R.drawable.cell_normal)の後に' v.invalidate ); '? –
またはafter board.MakeMove()の場合、この関数のビューで計算を増やしている場合 – NSimon