我想让它在我按下空格时,可以在一个位置上暂停一个移动的矩形堆栈,然后向右复制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-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[]>();
有了这个方法,你可以看一下对象方向,只是要把事情弄清楚。(如果你愿意,我可以告诉你,你的代码看起来像面向对象)
问候和好运!