处理Java-绘制日食或加载图片的问题

时间:2018-12-26 20:25:09

标签: java processing loadimage

我正在为我的学校测试“使用Java处理”中的代码。

我尝试创建游戏,但在绘制日食或加载图片时遇到问题。 我认为图片或日食是在我的游戏板下绘制的。.我不知道该如何解决。

我有一个用于游戏板的txt文件(按级别)。 一个例子:

110000000 000000031 000000000 1亿 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 :(得分:0)

它确实在游戏板下绘制。

检查loadCard功能。首先绘制椭圆/图像,然后绘制具有相同x / y的矩形,并在其顶部按ergo键。

稍微修改一下代码,它应该显示椭圆/图像

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()在每一帧都被调用。它已经在安装程序中被调用,目前还可以。最终,您可以将其放在单独的函数中,并在新级别的开头调用该函数。

如果使用double for循环绘制游戏板,则可以将迭代器(int i和int j)用作x / y变量。可以使用rect(x, y, w, w);代替rect(i*w, j*w, w, w);。这样,您将可以管理更少的变量。