Тип выражения должен быть типом массива, но он разрешается в BufferedImage


Это действительно странно, ошибка в textures[x].

The type of the expression must be an array type but it resolved to BufferedImage

Что здесь не так с кодом?

static BufferedImage textures[][] = new BufferedImage[20][20];

public static void loadTextures()
{
    try 
    {
        //Loads The Image
        BufferedImage textures = ImageIO.read(new URL("textures.png"));

        for (int x = 0; x < 1280; x += 1)
        {
            for (int y = 0; y < 1280; y += 1)
            {
                textures[x][y] = textures.getSubimage(x*64, y*64, 64, 64);
            }
        }

    } catch (Exception e) 
    {
        e.printStackTrace();
    }
}
3 2

3 ответа:

Вы повторно используете имя, которое вы дали своему массиву для изображения, которое вы планируете разбить на отдельные элементы. Вы должны дать ему другое имя, чтобы заставить его работать:

BufferedImage fullImage = ImageIO.read(new URL("textures.png"));

for (int x = 0; x < 1280; x += 1) {
    for (int y = 0; y < 1280; y += 1) {
        textures[x][y] = fullImage.getSubimage(x*64, y*64, 64, 64);
    }
}

Это выглядит как двусмысленность происходящего.. измените имя локальной переменной с BufferedImage textures на BufferedImage texture

Вы создаете новую переменную с именем textures здесь:

BufferedImage textures = ImageIO.read(new URL("textures.png"));

, который не является двумерным массивом, как переменная static. textures[x][y] в for-цикле находится ссылка на эту переменную, которая объясняет ошибку. Переименуйте один из них, чтобы решить проблему.

Кстати это называется переменное затенение.