2016-05-19 2 views
0

Кто-то, пожалуйста, помогите. Я пытаюсь отобразить изображение кирпича слоем за слоем, но когда я запускаю свой код, он просто отображает один кирпич в том месте, где заканчивается цикл. Спасибо, что помогли мне.Как отображать изображения, используя цикл в java

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 копий одной и той же справки, но зачем тратить память без причины). Кроме того, из-за этого код становится сложнее понять.

Смежные вопросы