2015-03-02 79 views
0

我已經創建了一個2d枚舉(具有常量類型的某些圖塊)的地圖變量,基本上我正在嘗試使它能夠以多種方式呈現地圖,而無需將特定渲染方法添加到地圖類中,但進入另一個班級。如何將數組值的私有2d枚舉傳遞給另一個類?

我有一個簡單的控制檯打印命令,但當我使用嵌套循環來通過座標我不能通過數組值(打印),但我可以使用方法(getHeight() ,getWidth等),因爲它們是公開的,而不是數組值,因爲地圖在TiledMap類中是私有的。

我試過使用'this',但我不認爲我正確使用它,我不明白你如何通過'this'傳遞地圖數組,我已經在網上查詢了'這',但我還找不到任何解決方案。我認爲,因爲我將地圖傳遞給渲染器,所以我可以訪問數組值,但是我不能。

問題:「類型的表達式必須是一個數組類型,但它解析成TiledMap類」

public class ConsoleRenderer implements MapRenderer{ 
@Override 
public void render(TiledMap map) { 

    //map = TiledMap(this); < attempt at using 'this' 

     for (int row = 0; row < map.getWidth(); row++) { 
      for (int col = 0; col < map.getHeight(); col++) { 

      System.out.print(map[col][row].asChar()); //Problem occurs<<< 

      }   
      System.out.println(" "); 
     } 
} 

}

Final class TiledMap implements ITiledMap{ 


private TerrainType[][] mMap; 
private MapRenderer mRenderer; 


    public TiledMap(int aWidth, int aHeight, TerrainType aType, ConsoleRenderer Renderer) 
    { 
     mMap = new TerrainType [aWidth][aHeight]; 

     for (int x=0; x<aWidth; x++) 
     { 
      for (int y=0; y<aHeight; y++) 
      { 
       mMap[x][y] = aType; 
      } 
     } 

     this.mMap = mMap; 

     //sets the method of renderer 
     setRenderer(Renderer); 

    } 

任何相關的材料或指針將不勝感激,謝謝。

+1

你的變量'map'在'ConsonleRenderer#渲染()'是類型'TiledMap'。 'TiledMap'不是像'TerrainType [] []''這樣的數組類型。你混淆了這兩個嗎? – Christopher 2015-03-02 10:24:24

+0

是的,我想他們是同一件事,謝謝。 – Iain 2015-03-02 10:35:24

回答

1

在tiledMap類中,您不必使用this.mMap = mMap,因爲您尚未在構造函數中創建局部變量。您只是將mMap等於自身。您正在for循環中將值傳遞給它。您只有當你有一個與全局變量同名的局部變量時,才應該使用this。 而在你的ConsoleRenderer類中,你正在傳遞一個類TiledMap而不是一個數組。你必須有一個getter來訪問你的數組mMap。但是當你傳遞TiledMap命名的map時,你可以使用它作爲一個數組,一個數組,因爲它只是一個類而不是一個類的數組。 做一個getter函數爲您陣列MMAP這樣的:

public TerrainType[][] getTerrainType(){ 
return mMap; 
} 

然後在consoleRenderer你可以這樣做:

map.getTerrainType[][] 
+0

現在工作,不知道爲什麼我想這個數組傳遞以及沒有得到的方法,歡呼聲。 – Iain 2015-03-02 10:36:27

+0

很高興我能幫到你。 – user3723184 2015-03-02 10:37:41

相關問題