我正在尝试在Java中进行类Rogue练习。这是我生成地板的代码(现在只是一个大房间,边缘上有墙砖)。我试图将我的瓷砖阵列中的某些瓷砖设置为墙砖或地砖。尽管当他们离开setTile方法时,它们会在进入该方法之前恢复到其值。我快疯了这是我的代码:

public Floor(int width, int height) {
        this.tiles = new Tile[(width+1)*(height+1)];
        this.width = width;
        this.height = height;
        generateTiles();
        boolean test = false;
    }
    public Tile getTile(int x, int y)
    {
        return tiles[y * width + x];
    }

    public void setTile(int x, int y, Tile tile)
    {
        Tile tileToSet = getTile(x,y);
        tileToSet = tile;
    }
    private void generateTiles() {
        for (int i = 0; i < tiles.length; i++)
        {
            tiles[i] = new Tile();
        }
        //make the top wall
        for (int i = 0; i<width;i++)
        {
            setTile(i,0,new WallTile());
        }
    }
}

最佳答案

您的setTile没有任何意义。您正在检索当前位于该位置的图块,将其存储在局部变量tileToSet中,然后覆盖该变量的值。

您正在尝试将给定的切片存储在tiles数组中。与getTile的实现方式类似,您可以使用以下方法执行此操作:

public void setTile(int x, int y, Tile tile)
{
    tiles[y * width + x] = tile;
}


请注意,这与以下项不等效(但您似乎认为如此):

public void setTile(int x, int y, Tile tile)
{
    Tile tileToSet = tiles[y * width + x];
    tileToSet = tile;
}

09-26 15:41