申し訳ありませんが、これはコードの一部ですが、ここで切り抜けることはあまりありません。これは、イメージ(アルファベットのスプライトシート)を読み込んで、個々の文字であるより小さなサブイメージに分割することになっています。キーを押すと、対応する文字が画面に表示されますが、この部分は実際のサブイメージを作成するためのものです。Java:このスプライトシートの読書コードの一部を理解していないのですか?
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();
}
}
}
iとjが何をしているのかわかりません。私はここで何が欠けていますか?それは
j * width,
i * height,
そしてまた、幅と高さでなければなりません
これは、 '行'と '列'が別の文字のインデックスを検索するたびに変更する必要があることを意味しますか?私は 最終int行= 4を持っているので、 final int cols = 13; jとiを常にcolとrowsに等しくするforループがあるため、これは常に "letters [(4 * 4)+ 13]"ではありませんか? – GlassZee
行と列はループの上限です。 iとjは0からrows/colsに敬意を持って変化するので、(i * cols)+ jの式は各ループ反復で文字配列の異なるインデックスに評価されます。 –
さて、私はどのようにループが働いたのか混乱していました。ありがとう – GlassZee