2010-08-17 142 views
0

我在我的第一場比賽的路上,所有的設計和東西都完成了,只剩下編碼。 我已經成功地觀看了有關圖形的信息以及如何在其中創建成功的線程同步的萬維網上的教程。創建一個簡單的,簡單的遊戲引擎

像現在一樣,我有一個SurfaceView類和一個線程類。線程類有這個構造函數來從我的SurfaceView類接收遊戲引擎。從線程類的構造函數 簡單代碼:

public Thread(SurfaceHolder localsurfaceHolder, 
    Context context, 
    Handler handler, 
    SurfacefView localEngine) { 

    surfaceHolder = localsurfaceHolder; 
    this.handler = handler; 
    this.context = context; 
    engine = localEngine; 
} 

從surfaceCreated法我SurfaceView類:

thread = new GameThread(getHolder(), context, new Handler(), this); 

而且有我的代碼創建表面時將啓動trigging線程。

現在到真實交易。不久我想要一個與視圖完全分離的遊戲引擎。問題是;如何實現這一目標? GameEngine類的構造函數應該如何以及我應該在哪裏放置繪圖/計算方法? GameEngine是什麼?

現在我GameEngine一流的樣子:提前

package com.myname.mygame; 

public class GameEngine { 

     //If im right, a constructor for the engine should be placed here 
     //How and which parameters shall I change and send with from the view 

} 

謝謝!

回答

2

GameEngine-class構造函數應該如何看起來像。

一個常見的模式是有一個爲視圖提供方法的facade類。這將是用戶界面的主要控制類,因此任何更新模型狀態的命令都會通過此類。由於您通常只需要一個實例,因此單例在這裏可能很有用。

public class GameEngine { 
    private static GameEngine instance = null; 

    private GameEngine(){ 
     // init stuff here 
    } 

    public static GameEngine getInstance(){ 
     if(instance == null){ 
      instance = new GameEngine(); 
     } 
     return instance; 
    } 
} 

的控制類將然後也從芯回用戶接口,其可以通過吸氣劑的方法來訪問傳遞對象。我並不是說這就是你必須這樣做的方式,它只是一種鬆散耦合的方式。

我應該在哪裏放置圖紙/計算方法?

移動,碰撞,AI和我放在模型中的東西的計算。用於繪製依賴的東西。爲了提高可移植性和內聚性,我通常會將這些東西放在視圖中。

玩得開心。

+0

感謝您的回答!我明白我應該把我的init-stuff放在哪裏。 但是,getInstance,是否只是爲了第一次加載東西,當實例爲空?還有一件事,我仍然不明白我必須建立的聯繫,才能以正確的方式觸發和更新對象。我應該如何在線程類中連接我的GameEngine? – Curtain 2010-08-17 21:23:00

+0

第一次調用getInstance()時,它會爲該類的構造函數運行一次,因此對它的任何進一步調用僅使用現有模型。要想連接引擎,只需要訪問模型,只需從您的界面調用getInstance()。或者,當您第一次在界面中存儲對其的引用時,就可以調用它。希望這是有道理的。 – 2010-08-17 21:32:51

+0

我想我現在明白了。然後,我還將必要的計算/繪圖函數放入GameEngine中,然後放入線程類,例如GameEngine.getInstance()。calculateNow();訪問GameEngine的calculateNow()方法。對? – Curtain 2010-08-17 21:46:34