1

透明なアクティビティがDialogあり、一時停止メニューのようなものなので、ダイアログが表示されてHomeボタンを押すと、すべて正常に機能しますが、再度開くとDialog、背景が空白になることを除いて表示されます。ゲームは で作られてcanvasいるSurfaceViewので、その画面に表示できない Dialog、または表示できない、しようとしているが毎回エラーが発生する

したがって、戻るキーを押すとDialog完全に表示されます:

ここに画像の説明を入力

しかし、ホームボタンをクリックし、ホームボタンを長押ししてアプリを再度開くと、次のようになります。

ここに画像の説明を入力

onResume コード:

@Override
    protected void onResume() {
        super.onResume();
        ourSurfaceView.resume();
    }

public void resume() {
            isRunning = true;
            ourThread = new Thread(this);
            ourThread.start();
        }

を示すアクティビティDialog:

public class ShowPopUp extends Activity {

    Dialog myDialog;
    GameSurface ourSurfaceView;
    Button toMenu;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.showpopupmain);

        myDialog = new Dialog(ShowPopUp.this);
        myDialog.setContentView(R.layout.showpopup);
        myDialog.setTitle("Paused");
        myDialog.setCancelable(true);
        Button button = (Button) myDialog.findViewById(R.id.Btn1);
        toMenu = (Button)myDialog.findViewById(R.id.Btn2);
        toMenu.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                finish();
                Intent menu = new Intent(
                        "com.example.mygame.Menu");
                startActivityForResult(menu, 5);
            }
        });

        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                myDialog.dismiss();
                finish();
            }
        });
        myDialog.show();
        myDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {

            @Override
            public void onCancel(DialogInterface dialog) {
                ShowPopUp.this.finish();

            }
        });

    }
}
4

1 に答える 1

0

Caseyのコメントを拡張する:アクティビティのonPause()内のダイアログを閉じて、SurfaceViewが再開するかどうかを確認してみてください。含まれている場合は、onResume()を使用して、ダイアログを再度表示できます(サーフェスを再開した後)。

実際のゲームを進めずに描画ループを実行できるように(描画状態だけでなく)一時停止/再開されたゲーム状態を追跡するために、サーフェス/ゲームループに追加のフラグを設定する必要があります。

于 2013-01-09T13:01:31.683 に答える