我创建了一个2d枚举的地图变量(某些具有常量类型的切片),实际上我正在努力使它能够以多种方式渲染地图,而无需将特定的渲染方法添加到地图类中,但进入另一个班级。
我现在有一个简单的控制台打印命令,但是当我使用嵌套循环遍历坐标时,我无法通过数组值(打印),但我可以使用这些方法(getHeight( ),getWidth等来自map类)因为它们是公共的,所以不是数组值,因为地图在TiledMap类中是私有的。
我已经尝试过使用'这个'但我不认为我正在使用它,我不明白你如何通过地图数组传递这个'我已经在网上查了一些例子'这个& #39;但我还没有找到任何解决办法。我认为,因为我将地图传递给渲染器,我也可以访问数组值,但我不能。
问题:"表达式的类型必须是数组类型,但它已解析为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);
}
非常感谢任何相关的材料或指示,谢谢。
答案 0 :(得分:1)
在tilesMap类中你不必使用this.mMap = mMap
,因为你还没有在构造函数中创建一个局部变量。你只是使mMap等于它自己。你传递的值是只有当你有一个与全局变量同名的局部变量时,才应该使用this
。
在你的ConsoleRenderer类中,你传递一个类TiledMap而不是一个数组。你必须有一个getter来访问你的数组mMap
。但是当你传递TiledMap命名映射时,你可以使用它作为一个数组,你可以&#39;我只是像数组一样使用它,因为它只是一个类而不是一个类数组。
为你做一个getter函数array mMap:
public TerrainType[][] getTerrainType(){
return mMap;
}
然后在consoleRenderer中你可以这样做:
map.getTerrainType[][]