2011-08-05 72 views
0

我開發Android遊戲,我有我的SurfaceView渲染的比賽,我想使它所以當玩家輸掉或贏得一個AlertDialog彈出,要麼重新啓動級別或什麼的。Android開發人員:AlertDialog與SurfaceView

基本上我有兩個問題:

  1. 如何使用AlertDialogs與SurfaceViews?我是否必須將它放入layout.xml中,還是將它編入UI部分或遊戲線程部分?

  2. 有沒有一種方法來「重新啓動」的活動,因此不會使一個新的開始只是目前一個在與它最初被給予相同的「意圖」?

謝謝!

+1

不確定這個...但檢查出http://www.andengine.org/ ...創建遊戲 – Jack

+2

感謝您的建議,但我想從頭開始建立自己的比賽非常有用。 –

回答

2

您可以使用this.Start();在任何情況下,重新啓動您的活動線程這是你的第二個問題的答案。

或者你可以使用

if(maze.isGameComplete()) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(context); 
    builder.setTitle(context.getText(R.string.finished_title)); 
    LayoutInflater inflater = context.getLayoutInflater(); 
    View view = inflater.inflate(R.layout.finish, null); 
    builder.setView(view); 
    View closeButton =view.findViewById(R.id.closeGame); 

    closeButton.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View clicked) { 
     if(clicked.getId() == R.id.closeGame) { 
      context.finish(); 
     } 
     } 
    }); 

    AlertDialog finishDialog = builder.create(); 
    finishDialog.show(); 
} 
+0

這看起來像我腦子裏想的那樣,但它到底在哪裏? –

+0

請正確提問所以我可以幫你。 – Nitin

+0

我的代碼在哪裏呢?在UI代碼,線程或遊戲視圖中? –

1

,您可以重新從SurfaceView類的活動,但它是一個「髒」的方式,它可能會閃爍,它可能需要太多內存中的進程和應用程序崩潰

Intent intent = ((Activity) getContext()).getIntent(); 
getContext().startActivity(intent); //start the same activity again 
((Activity) getContext()).finish(); //finish the previous instance 

正確的方法是通過寫這將重置所有必需的變量,清除舊對象從的ArrayList等

它的方法重新初始化遊戲可以使用警告對話框,但是標準的android對話框對於一個漂亮的遊戲來說看起來太基本了,因此最好爲對話創建另一個gaphics對象並在屏幕上繪製它,甚至可以使用動畫...使用一個透明的活動是另一種可能性,它賦予更多的設計自由。