私は、ゲームスレッドの再生中にユーザーがデバイスの戻るボタンを押したときにゲームを開発中です。スクリーン上に警告ダイアログが表示されます。ユーザーがゲームを終了したくない場合スレッドを再開してアラートダイアログが消えるはずです。しかし、問題はゲームスレッドを再開できますが、以下のアラートダイアログをキャンセルできませんでした。私の戻るボタンのイベントコードスニペットです。警告ダイアログがキャンセルされない
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
MainGamePanel.thread.setRunning(false);
AlertDialog alertDialog = new AlertDialog.Builder(this).create();
alertDialog.setTitle("Exit Alert");
// alertDialog.setIcon(R.drawable.appicon);
alertDialog.setMessage("Do you really want to exit the Game?");
alertDialog.setButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
finish();
return;
} });
alertDialog.setButton2("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if(mainscreenOn)
{
dialog.cancel();
}
else
{
dialog.cancel();
GamePanel.thread.setRunning(true);
GamePanel.thread.run();
}
return;
}});
alertDialog.show();
return true;
}
return super.onKeyDown(keyCode, event);
}
mainscreenOnフラグがtrueの場合、問題はそれがfalse.can誰が私を助けてくださいている場合...私はこの上で立ち往生していていますcancelled..but、警告ダイアログが取得している...
私は私はコントロールが起こっているコードをデバッグするとき
public class GameThread extends Thread {
private static final String TAG = GameThread.class.getSimpleName();
// Surface holder that can access the physical surface
private SurfaceHolder surfaceHolder;
// The actual view that handles inputs
// and draws to the surface
private MainGamePanel gamePanel;
// flag to hold game state
public boolean running;
public void setRunning(boolean running) {
this.running = running;
}
public GameThread(SurfaceHolder surfaceHolder, MainGamePanel gamePanel) {
super();
this.surfaceHolder = surfaceHolder;
this.gamePanel = gamePanel;
}
@Override
public void run() {
Canvas canvas;
Log.d(TAG, "Starting game loop");
while (running) {
Log.v(""," ->Inside Thread!" + running);
canvas = null;
// try locking the canvas for exclusive pixel editing
// in the surface
try {
canvas = this.surfaceHolder.lockCanvas();
synchronized (surfaceHolder) {
// update game state
this.gamePanel.update();
// render state to the screen
// draws the canvas on the panel
this.gamePanel.render(canvas);
}
} finally {
// in case of an exception the surface is not left in
// an inconsistent state
if (canvas != null) {
surfaceHolder.unlockCanvasAndPost(canvas);
}
} // end finally
}
}
}
...それは私のゲームの問題以下thread..givenが私のゲームのスレッドコードである...それは警告ダイアログの問題ではないことを知るようになりましたこのコードに貼り付けてここに貼り付けてください。
ここからスレッドを呼び出すのは問題ですが、私はそれを修正する方法を教えてくれませんでした... –
私はあなたを考えましたこの理由を知らない、申し訳ありません私はあなたの問題を解決するためにあなたを助けることはできません。 bye –
もし私がrun()メソッドを呼び出していないのであれば、どうすれば呼び出すことができますか?setRunning(true)statement.butで試してみましたが、動作しません。 –