2012-10-03 54 views
0

我試圖在我的android whack-a-mole遊戲中創建一個MVC模式。從模型傳遞數據通過控制器查看

我通過內部類的線程在模型中生成摩爾位置,並且最終要將它傳遞給視圖,以便它會爲它生成一個精靈。

如何爲我的視圖創建一種方式,以不斷從我的模型中接收生成的痣位置?

我編輯了下面的代碼來捕捉它們背後的要領。

MODEL:

public class GameModel{ 
    public GameModel(){ 
     spawner = new MoleSpawner(); 
     spawner.start(); 
    } 
. 
. 
. 
    private class MoleSpawner extends Thread{ 
     private int location; 
     public void run() { 
      location = new Random().nextInt(20); 
      try{ 
      sleep (1000); 
      } catch (InterruptedException ex){ 
      ex.printStackTrace(); 
      } 
     } 
    } 
} 

VIEW:

public GameView{ 
. 
. 
. 
    public void createMoleSprite(int newlocation){ 
    //create sprites here 
    //newlocation should come from the MODEL 
    //this method must be triggered everytime the MODEL creates a new location 
    } 
} 
+2

我會盡量誠實和樂於助人 - 第一次嘗試MVC時,你將無法正確地遵循它。我知道我沒有。所以,不要太在意MVC - 專注於使其工作。一旦你開始工作,你會注意到你怎麼可能更多的MVC;但不要讓「我不遵循MVC」的想法成爲代碼中的阻止塊。 – Shark

+0

@鯊魚,非常真實!我從MVC開始經歷過很多次,將一些模型代碼放在控制器中,一些放在模型中,一些放在視圖中,一旦我把所有東西都移到正確的位置加工。 –

回答

1

一個可以實現這一點的辦法是使用處理程序。

它可能更復雜,但我會給你一個關於如何實現這個的簡單例子。

在你的遊戲運行的活動,得到它的處理器採用

Handler mHandler = new Handler(); 

然後,當你實例化模型,通過它的mHandler對象以及對活動爲您提供參考。在模型中,每當你需要生成一個新的痣,做

mHandler.post(new Runnable() { 

    gameActivity.spawnNewMoleAt(location); 


}); 

這可以成爲複雜得多,expecially如果你控制在該摩爾的動態生成的速度,但你可以建立在此。

你可以在處理程序HERE上找到一個很好的教程。

+0

這是否意味着數據將直接從模型中查看,繞過控制器? – user571099

+0

不,處理程序用於發送消息活動 - 通常用於從非UI線程處理UI元素。這實際上是與Android有關的,與MVC範例無關。 仍然是一個很好的建議thouhg – Shark

+0

是的,但你也可以把處理程序傳遞給控制器​​,並從那裏發佈。 –

相關問題