在以下代码中,它运行时没有错误,但没有输出。但是,当我从draw()循环中删除代码时,它输出成功。 如果我将代码放在for循环中,那么输出只发生在for循环的末尾,而不是在for循环期间。 我不明白为什么这两种情况都没有输出。
void setup(){
size(800,800);
}
int rows = height;
int cols = width;
int [][] myArray = new int[rows][cols];
void draw(){
background(255);
for (int i=0;i<cols;i=i+10){
for (int j=0;j<rows;j=j+10){
myArray[i][j]=int(random(255));
}
}
for (int i=0;i<cols;i=i+10){
for (int j=0;j<rows;j=j+10){
fill(myArray[i][j]);
rect(i,j,i+10,j+10);
}
}
}
答案 0 :(得分:3)
width
之前, height
和size()
没有实际值。仅仅因为你将变量放在函数之后,并不意味着它们在setup()
运行后被赋值:所有全局变量都被分配 BEFORE 运行任何函数。因此,在这种情况下,你最终得到的宽度和高度为0,因为没有颜色的像素,所以绝对不会绘制任何颜色=)
你想要这个:
// let's put our global vars up top, to prevent confusion.
// Any global variable that isn't just declared but also
// initialised, gets initialised before *anything* else happens.
int rows, cols;
int[][] myArray;
// Step 2 is that setup() runs
void setup(){
size(800,800);
// now we can initialise values:
rows = width;
cols = height;
myArray = new int[rows][cols];
}
// Setup auto-calls draw() once, and
// then draw() runs at a specific framerate
// unless you've issued noLoop() at some point.
void draw(){
background(255);
for (int i=0;i<cols;i=i+10){
for (int j=0;j<rows;j=j+10){
myArray[i][j]=int(random(255));
}
}
for (int i=0;i<cols;i=i+10){
for (int j=0;j<rows;j=j+10){
fill(myArray[i][j]);
rect(i,j,i+10,j+10);
}
}
}
也就是说,我们在这里甚至不需要rows
和cols
,我们可以直接使用width
和height
,而我们不需要两个循环,我们只需要一个,因为我们在绘制矩形时没有使用尚未设置的相邻像素。我们只需要一直跳过10,你已经做过了:
int[][] myArray;
// Step 2 is that setup() runs
void setup() {
size(800,800);
myArray = new int[width][height];
}
void draw() {
background(255);
int i, j, step = 10;
for (i=0; i<height; i=i+step) {
for (j=0; j<width; j=j+step) {
myArray[i][j]=int(random(255));
fill(myArray[i][j]);
rect(i,j,i+step,j+step);
}
}
}