如何在java

时间:2016-05-19 23:26:08

标签: java arrays image paint

有人请帮忙。我试图逐层显示砖的图像,但是当我运行我的代码时,它只是在循环结束的位置显示一块砖。谢谢你帮助我。

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 个答案:

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