Обработка Java - проблема с рисованием затмения или загрузки картинки - PullRequest
0 голосов
/ 26 декабря 2018

Я тестирую код в Обработка с Java для своей школы.

Я пытаюсь создать игру, и у меня есть проблема, чтобы нарисовать затмение или загрузить картинку.Я думаю, что картинка или затмение рисуются под моей игровой доской ... Я не знаю, как ее решить.

У меня есть текстовый файл для игровой доски (по уровню).Пример:

110000000 000000031 000000000 100000000 000000000 000000000 200000001

Пожалуйста, не могли бы вы мне помочь, спасибо

int cols, rows, w, x, y,level;
String lines[];
PImage flag;

void setup() {
  size(460,360);
  cols = 9;
  rows = 7;
  w = 50 ;
  x= 0;
  y = 0;
  level = 1;
  lines = loadStrings("../../data/niveau"+level+".iwk");
  flag = loadImage("../../data/flag.png");
  ellipseMode(CORNER);
}

void draw() {
  String lines[]= loadStrings("../../data/niveau"+level+".iwk");
  loadCard(cols,rows,w,x,y,lines,flag);
}

void loadCard(int cols, int rows, int w, int x,int y,String lines[],PImage flag) {

  for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {

      if(lines[i].charAt(j) == '1'){
        fill(156,  158,  162);
      }
      else if(lines[i].charAt(j) == '2'){
        fill(225,  169,  26) ;
        ellipse(x,y,w/2,w/2);
      }
      else if(lines[i].charAt(j) == '3'){
        image(flag,x,y,w/2,w/2);

      }else {
        fill(23,  159,  215);
      }

      rect(x, y, w, w);
      x = x + w ;
    }
    y = y + w ;
    x = 0 ;
  }
}

1 Ответ

0 голосов
/ 27 декабря 2018

Он действительно нарисован под игровым полем.

Проверьте функцию loadCard.Сначала рисуется эллипс / изображение, затем рисуется прямоугольник с тем же значением x / y, поэтому поверх него эргономично.

Немного изменив код, он должен отображать эллипсы / изображение

void loadCard(int cols, int rows, int w, int x,int y,String lines[],PImage flag) {

  for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {

      //draw default so ellipse / img has a background
      fill(23,  159,  215);
      rect(x, y, w, w);

      //draw other cases on top of default    
      if(lines[i].charAt(j) == '1'){
        fill(156,  158,  162);
        rect(x, y, w, w);
      }
      else if(lines[i].charAt(j) == '2'){
        fill(225,  169,  26) ;
        ellipse(x,y,w/2,w/2);
      }
      else if(lines[i].charAt(j) == '3'){
        image(flag,x,y,w/2,w/2);
      }
      x = x + w ;
    }
    y = y + w ;
    x = 0 ;
  }
}

Поскольку вы учитесь, позвольте мне дать вам 2 совета:

loadStrings () должно происходить только один раз на уровень.Вы не должны помещать это в draw (), потому что draw () вызывается каждый кадр.Он уже вызван в настройке, сейчас это нормально.В конце концов вы можете поместить ее в отдельную функцию и вызывать эту функцию в начале нового уровня.

Если вы используете двойной цикл for для рисования игрового поля, вы можете использовать итераторы (int i иint j) в качестве переменных x / y.Вместо rect(x, y, w, w); вы можете использовать rect(i*w, j*w, w, w);.Таким образом, вы будете иметь меньше переменных для управления.

...