ゲームが終了すると、警告ダイアログが表示され、ゲームが終了し、得られたスコアが表示されます。これは1回以上ですが、アプリがクラッシュするまでダイアログを開いたままにしています。私はなぜこれをやっているのか分かりません。 logcatはエラーを報告していません。私はtry {}でダイアログを開くコードを置こうとしましたが、それは時々動作しましたが一貫して動作しませんでした。問題の原因は何ですか?alertdialogが複数回開こうとしました
ここに関連コードがあります。
class SnakeView extends SurfaceView implements Runnable {
public SnakeView(Context context, Point size){
super(context);
handler = new Handler(context.getMainLooper());
mContext = context;
mScreenWidth = size.x;
mScreenHeight = size.y;
mBlockSize = mScreenWidth/NUM_BLOCKS_WIDE;
mNumBlocksHigh = ((mScreenHeight))/mBlockSize;
loadSound();
mHolder = getHolder();
mPaint = new Paint();
mSnakeXs = new int[200];
mSnakeYs = new int[200];
startGame();
}
public void updateGame(){
if (mSnakeXs[0]== mMouseXs && mSnakeYs[0] == mMouseYs){
eatMouse();
}
moveSnake();
if (detectDeath()){
mSoundPool.play(mDead_sound, 1, 1, 0, 0, 1);
final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(mContext);
alertDialogBuilder
.setTitle("Game Over!")
.setMessage("Your score: " + mScore + "!")
.setCancelable(false)
.setPositiveButton("New", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(mContext, SnakeActivity.class);
mContext.startActivity(intent);
}
})
.setNegativeButton("Exit", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(mContext, Start.class);
mContext.startActivity(intent);
}
});
runOnUiThread(new Runnable() {
@Override
public void run() {
alertDialogBuilder.show();
}
});
}
}
private void runOnUiThread(Runnable r){
handler.post(r);
}
}
はそうし。 – ADM
複数回呼び出された場合、 'if(detectDeath()&&!playerDead)'を使用し、ダイアログを表示する前に 'playerDead = true'を設定することができます。 –
ダイアログを表示するかどうかを検出するブール値を含めることができます –