2013-02-26 105 views
0

我有一個遊戲,我正在開發使用surfaceview。使用新班級? Android遊戲開發

它具有surfaceview將使用的常規方法。

onDraw(){ 

Drawing here 

} 

updateGame(){ 

Update logic here 

} 

run() { 

while (isRunning){ 

onDraw() 
updateGame() 
} 

} 

所以目前我有一個閃屏,一個選項屏幕和遊戲本身。每一個都是一個單獨的活動(因此它有自己的類)。

但是每個人都塞進一個班級(甚至是遊戲),並且很難看到發生了什麼。

隨着我的選擇屏幕,有幾件事情,用戶可以做(如點擊幫助按鈕,或設置按鈕),我不知道怎麼火過另一個類,但在同一活動中仍然保持。

即,我想使用我在當前類中設置的畫布並在不同的類中繪製它。這可能嗎?我找不到任何有關這樣做的信息。

我瞭解java類的概念,我只是不知道如何將它們應用於我的情況。

或者是做一個更好的主意,我正在做什麼,只是爲每個「部分」創建新的活動?

回答

0

不使用課程就很難製作遊戲。

您應該聯繫以保留在活動中更新視圖的代碼。但是你應該完全抽象出你在另一個類的「updateGame()」中的代碼。我們將稱這個類爲商務類(Controller)。她負責組織遊戲過程

然後,如果您有備份的信息,則應該使用另一個類來訪問數據(數據訪問層/模型)。

我建議你閱讀本: http://www.leepoint.net/notes-java/GUI/structure/40mvc.html

,如果你有大量的動畫和大量的視頻,你應該使用一個框架,像新的活動,一個例子http://www.andengine.org/

示例菜單設置遊戲管理:

public class MainActivity extends Activity { 

    private static final int CODE_MENU_SETTING = 5; 
    private int mTimeGame; 
    private Thread mGameThread; 
    private boolean isCurrentGame, isPause; 
    private Button mStartGameButton; 

    private ClassBusinessGame mBusiness; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     //start button if you want to start the game with a button 
     mStartGameButton = (Button) findViewById(/*id button start game*/); 
     isCurrentGame = false; 
     isPause = false; 
     //mTimeGame counts the number of seconds of game 
     mTimeGame = 0; 
     //the class that controls the game 
     mBusiness = new ClassBusinessGame(...); 
     //example thread timer 
     mGameThread = new Thread("game thread") { 
      public void run() { 
       while(isCurrentGame) { 
        //here, your code to update your game, view 
        mTimeGame++; 
        try { 
         Thread.sleep(1000); //pause 1 sec 
        } catch(InterruptedException e) {} 
        while(isPause) {/*load*/} //this is not a good practice to break; loop while paused 
       } 
      } 
     }; 
    } 

    public boolean onCreateOptionsMenu(Menu menu) { 
     // here, directly call the Menu Setting Activity 
     // attention: here, stop the thread which manage your game 
     isPause = true; 
     Intent menuIntent = new Intent(this, MenuSettingActivity.class); 
     startActivityForResult(menuIntent, CODE_MENU_SETTING); //startActivityForResult to resume game 
     return true; 
    } 

    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if(requestCode==CODE_MENU_SETTING) { 
      //resume game 
      isCurrentGame = false; 
     } 
    } 
} 

這是一個基本的例子,許多改進是可能的,但它是(沒有框架的遊戲)的想法

+0

感謝@juliendumortier,所以,如果在mycase,我有一個選項屏幕,有一個「設置」按鈕。當用戶按下該按鈕時,我應該開始另一項活動嗎? (這是我現在的做法) - 或者我應該呆在同一個班級和活動中。我明白你說的是分裂邏輯和繪圖,但是我如何描述不同的'部分'?我開始了一項新活動,因爲我可以創建一個新課程並保持一切整潔,但我不確定在同一活動中是否有辦法做到這一點? – Zippy 2013-02-26 17:55:03

+0

對我而言,我的大部分應用程序顯示設置菜單,但我使用的是AlertDialog。這避免了切換到另一個活動。但是,你可以很好地使用新的活動來完成菜單設置。這裏沒有地方,我會用示例代碼編輯答案。 – 2013-02-26 21:42:54

2

使用片段:http://developer.android.com/guide/components/fragments.html

他們將允許你把你的活動變成了一堆小,嵌套件。片段代表屏幕的一部分,並可以管理自己的行爲,如活動。他們被添加到Honeycomb中,但Google爲早期版本提供支持包。谷歌正試圖讓他們從我所知道的標準做法。

0

你好的人,我想你需要一個遊戲引擎,或者你可以開發一個樣本一個像

class Screen { 
    public void onShow(); 
    public void onHide(); 
    public void onUpdate(); 
    public void onDraw(Canvas canvas); 
} 

class Engine { 
    Screen mScreen; 

    public void setScreen(Screen s) { 
     mScreen = s; 
    } 

    ... 
} 

的方式Libgdx是一個不錯的選擇 http://code.google.com/p/libgdx/