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);
}
}
答案 0 :(得分: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个副本,因此变化非常小,但为什么无缘无故地浪费内存)。此外,由于这个原因,代码变得更难理解。