2d 数组出现问题,无法冻结一个对象并将所述对象复制到右侧 90 像素



我正在尝试使它,以便当我点击空格时,我可以在一个位置上暂停移动的矩形堆栈,并将其向右复制 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);
}
}

因此,这是一种将列复制到右侧的快速方法。 我正在做的是每次按空格键时将 90 添加到valueX。 然后valueX将被扔进嵌套的 for 循环中。

我希望这是你想要的输出!(如果没有,请发表评论,我会尝试修复它。

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);
}
}

您对 2D 数组的想法还不错,但问题是数组具有固定大小。因此,您要使用的是x轴的ArrayList和y轴的Array(只要保持固定大小(。这看起来类似于这样:

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

使用这种方法,您可以查看面向对象,只是为了清理内容。(如果你愿意,我可以向你展示你的代码是如何看起来像面向对象的(

问候和祝你好运!

最新更新