게임이 끝나면 게임이 끝났으며 어떤 점수를 받았는지 경고 대화 상자를 열어야합니다. 이 작업은 한 번 이상 수행되며 앱이 다운 될 때까지 대화 상자를 열어 둡니다. 나는 왜이 일을하는지 알 수 없다. 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'를 설정할 수 있습니다. –
대화 상자가 표시되는지 여부를 확인하기 위해 부울을 포함 할 수 있습니다. –