2012-09-11 17 views
0

我很抱歉,這是一個模糊的主題/問題。自定義視圖類的代碼構造

比方說,我正在編寫一個常見棋盤遊戲的活動類。這個類可以被命名爲Game.java(一般來說)並且擴展了Activity並且維護了幾個按鈕和文本視圖,以及(更重要的)一個名爲Board.java(或者一個靜態嵌套類)的自定義View類,它擴展了SurfaceView。

現在,所有的繪圖基本上都需要在SurfaceView類中完成,因爲這是Android應用程序的本質。現在的問題是,如果這個棋盤遊戲(例如 - 英雄和怪物)存儲在相關列表中,那麼最佳實踐決定存儲這些列表?也就是說,人們會認爲這些列表應該由Game類來維護,因爲這在技術上是對遊戲進行更全面的整體觀察。然而,在這種情況下,靜態嵌套類(或單獨的頂級類)Board不能訪問這些列表,因此對於繪圖而言,它不知道每個片段的狀態是什麼,而不是在兩個類中同時維護,這非常麻煩。在Board中維護這個列表幾乎同樣麻煩,除了將它分配爲一個要開始的活動之外,這似乎將Game的目的明顯地抽象出來。

關於如何徹底實施這個任何整體的共識或意見?我個人的想法傾向於將其維持在董事會,爲了記憶和理智的目的,而不是任何事情,但如果有明顯缺失的東西,這將是非常有益的。

回答

0

我已經對此做了一點實驗,並在我的自定義SurfaceView類包含Thread的自定義實現時取得了成功。除了處理所有的物理和繪圖外,此線程還有內部類,它們代表繪製對象併爲我的畫布上的所有可見項維護這些對象的列表。

Google在下載SDK時包含示例,並且他們有一些涉及在畫布上繪圖的問題。我發現LunarLander示例是如何實現此行爲的一個非常好的起點。使用SDK管理器下載樣本後,您可以在android-sdk/samples中找到它們。希望這可以幫助。

+0

我想我應該指出,SurfaceView也實現了Runnable,所以它確實是一個線程。我的原始編碼方式就是你所描述的方式,隨着代碼開發必須不斷訪問遊戲中的Board對象,它變得非常麻煩。這感覺就像它除去了作爲Activity和一對按鈕的佔位符之外,也消除了Game對象本身的效用。 – SeaNick