Java: я не понимаю смысл части этого кода чтения спрайт-листа? - PullRequest
0 голосов
/ 31 января 2012

Извините, это немного кода, но здесь не так много вырезать. Это должно считывать изображение (спрайт-лист алфавита) и разрезать его на более мелкие подизображения, которые представляют собой каждую отдельную букву. Когда клавиша нажата, соответствующая буква появляется на экране, но эта часть предназначена только для создания фактического подизображения.

http://i.imgur.com/4I4uX.png (изображение)

package typeandscreen;
(where the imports should be, i just cut them out to save space)
public class Font{

    final int width = 78; //gives the dimensions of the image
    final int height = 32;
    final int rows = 4;
    final int cols = 13;

BufferedImage letters[] = new BufferedImage[rows*cols]; //makes the array of
                                                        //subimages. rows*cols is
                                                        //the number of subimages
void test(){
    try{
        final BufferedImage totalImage = ImageIO.read(new File("ABCabcs.png"));
                //loads the big image itself

Эта следующая часть меня смущает. Для чего я и j, и почему они складывают и умножают их? Эта часть предназначена для того, чтобы узнать, насколько большими должны быть изображения. Разве это не должно быть 4 на 13, то есть строки * столбцы?

    for(int i = 0; i < rows; i++){

        for(int j = 0; j < cols; j++){
            letters[(i * cols) + j] = totalImage.getSubimage(
                j * width,
                j * height,
                width,
                height
            );
        }
    }
    } catch(IOException e){
        e.printStackTrace();
    }
  }
}

Я не понимаю, что делают я и j. Что мне здесь не хватает?

1 Ответ

3 голосов
/ 31 января 2012

Это должно быть

 j * width,
 i * height,

А также ширина и высота кажутся слишком большими для размера одной буквы, но они используются как таковые.

я прохожу строкибукв, J проходит через столбцы.Чтобы получить координаты буквы в позиции (j, i), вам нужно умножить j (индекс столбца) на ширину (которая является шириной каждой буквы) и i (индекс строки) на высоту (буквы).

букв - это массив изображений, которые соответствуют буквам.

 letters[(i * cols) + j]

- это стандартная идиома для помещения прямоугольной матрицы в одномерный массив.Смотрите рисунок:

  0 1 2
0 A B C
1 D E F

сохраняются в массиве как

0 1 2 3 4 5
A B C D E F

, поэтому индекс F в этом массиве будет 1 * 3 + 2 = 5, где i = 1,j = 2 и столбцы = 3 (потому что есть 3 столбца)

...