2016-05-19 48 views
0

有人請幫忙。我試圖逐層顯示磚塊的圖像,但是當我運行我的代碼時,它只在循環結束的位置顯示一塊磚塊。謝謝你的協助。如何在java中使用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個副本,但爲什麼無緣無故地浪費了內存,所以變化實際上很小)。此外,由於這一點,代碼變得更難理解。