2d阵列的问题,使冻结一个对象,并复制所述对象90像素的权利。

问题描述 投票:0回答:1

我想让它在我按下空格时,可以在一个位置上暂停一个移动的矩形堆栈,然后向右复制90个像素并完成同样的运动。这应该发生在画布上的各个列(网格)上。我想需要一个2D数组,但我卡在了如何做到这一点。

如果有人知道如何做到这一点,我会非常感激一些帮助。

 float loc;
 float sizeW;
 float sizeH;
 float dir;
 boolean moving = true;

void setup() {
  size(1280, 720);
  loc = 0;
  dir = (float)height/720;
  sizeW = (float)width/14.2;
  sizeH = (float)height/8;    
}

void draw() {
  background(255);
  Rectangle();
  grid();
}

void Rectangle() {
  fill(255, 147, 79);
  stroke(0);

  int steppedPos = (int)(loc/sizeH+0.5);
  rect(0, steppedPos*sizeH, sizeW, sizeH);

  for (int i =0; i<90*4; i+=90) {
    rect(0, steppedPos*sizeH+i, sizeW, sizeH);
  }
      if (moving) {
       loc = loc + dir;
    if (loc + sizeH + 270 > height || loc < 0) {
      dir = dir * -1;
      loc = loc + dir;
    }
  }
}

void keyPressed() {
  if (key == ' ') {
    moving = !moving;    
  }
}    

void grid() {
  for (int i=0; i<width; i+=90) {
    line(i, 0, i, height);
  }
  for (int j=0; j<height; j+=90) {
    line(0, j, width, j);
  }
}
java processing
1个回答
0
投票

所以这里有一个快速复制列向右的方法.我所做的是将90加到 valueX 每次按下空格键。valueX 就会消失扔在嵌套的for-loop中。

我希望这是你想要的输出! (如果不是的话,请留言,我将尝试修复它。)

    float loc;
    float sizeW;
    float sizeH;
    float dir;
    float valueX = 0;
    boolean moving = true;

    void setup() {
      size(1280, 720);
      loc = 0;
      dir = (float)height/720;
      sizeW = (float)width/14.2;
      sizeH = (float)height/8;
    }

    void draw() {
      background(255);
      Rectangle();
      grid();
    }

    void Rectangle() {
      fill(255, 147, 79);
      stroke(0);

      int steppedPos = (int)(loc/sizeH+0.5);
    //  rect(0, steppedPos*sizeH, sizeW, sizeH);

      for (int i =0; i<90*4; i+=90) {
        for(int j = 0; j <= valueX; j+= 90){
        rect(0 + j, steppedPos*sizeH+i, sizeW, sizeH);
        }
      }
      if (moving) {
        loc = loc + dir;
        if (loc + sizeH + 270 > height || loc < 0) {
          dir = dir * -1;
          loc = loc + dir;
        }
      }
    }

    void keyPressed() {
      if (key == ' ') {
        moving = !moving;
        valueX += 90;
      }
    }    

    void grid() {
      for (int i=0; i<width; i+=90) {
        line(i, 0, i, height);
      }
      for (int j=0; j<height; j+=90) {
        line(0, j, width, j);
      }
    }

你用二维数组的想法并不坏,但问题是数组有一个固定的大小。所以你想用一个ArrayList来表示x轴,用一个Array来表示y轴(只要它保持固定大小)。这看起来就像这样。

    ArrayList<int[]> list = new ArrayList<int[]>();

有了这个方法,你可以看一下对象方向,只是要把事情弄清楚。(如果你愿意,我可以告诉你,你的代码看起来像面向对象)

问候和好运!

© www.soinside.com 2019 - 2024. All rights reserved.