2016-05-19 11 views
0

誰か助けてください。私はレイヤーごとにレンガの画像を表示しようとしていますが、コードを実行すると、ループが終了する位置に1つのレンガだけが表示されます。私を助けてくれてありがとう。forループを使って画像を表示するには

public class Game extends JApplet{ 

    Image [][] bricks = new Image[3][15]; 

    public void init() 
    { 
     Image brick = getImage(getDocumentBase(),"brick.png"); 

     for(int i =0; i < bricks.length; i++) 
      for(int j = 0; j < bricks[0].length; j++) 
        bricks[i][j] = brick; 


    } 

    public void paint (Graphics g) 
    { 
     for (int i = 0; i < bricks.length; i++) 
     for (int j =0; j < bricks[0].length; j++) 
      g.drawImage(bricks[i][j],i+85,j+30, this); 

    } 
} 

答えて

1

コードのこの部分は、あなたが明らかに期待どおりに動作しません:

for (int i = 0; i < bricks.length; i++) 
    for (int j =0; j < bricks[0].length; j++) 
     g.drawImage(bricks[i][j],i+85,j+30, this); 

それは、は15x3画像のグリッドを描くありません。しかし、ループのデザインによって、最初に描かれたレンガの位置(左上)は(85,30)になり、最後のレンガは(87,44)にペイントされます。問題は、各行および各行が、前の行/行から1ピクセルだけ異なることである。

あなたはおそらくのような何かを行うためのもの:

int imageWidth = bricks[0][0].getWidth(this), 
    imageHeight = bricks[0][0].getHeight(this); 

for (int i = 0; i < bricks.length; i++) 
    for (int j =0; j < bricks[0].length; j++) 
     g.drawImage(bricks[i][j], i * imageWidth + 85, j * imageHeight + 30, this); 

を、配列を作成することは基本的に役に立ちません。代わりに、同じ画像を最初に配列に複数回格納せずに繰り返し塗りつぶすのはなぜですか?この行列を使うと事態がより複雑になり、わずかに非効率的になります(同じ参照のコピーが45個しか保存されていないのに理由はありません)。さらに、コードはこれによって理解しにくくなります。

関連する問題