这个for循环不会绘制矩形,但会写入控制台

时间:2016-07-19 22:19:26

标签: java for-loop processing rect

for (int i = 0; i < 50; i++){
        noStroke();
        fill(50,50,50);
        rect(0,0,100,100,i);
        System.out.println(i);
        delay(100);
    }

这是for循环,它会将数字写为0到50,然后绘制一个矩形。目标是让它在角落上绘制具有增加半径的矩形。它不执行rect(),但执行System.out.println();.这是用java处理编写的。

1 个答案:

答案 0 :(得分:2)

请勿使用delay()功能创建动画。

draw()函数完成之前(或者如果你没有使用draw()函数,在代码结束之前,任何内容都不会绘制到屏幕上)。所有内容都被绘制到屏幕外缓冲区,然后在draw()函数完成时,缓冲区一次全部被绘制到屏幕上。

所以你真的要在屏幕外缓冲区绘制一个矩形,等待100毫秒,将另一个矩形绘制到屏幕外缓冲区,等待100毫秒,绘制另一个矩形,依此类推。在所有等待完成之后,您实际上不会在屏幕上看到任何内容。

如果要创建动画,请不要使用循环。相反,使用draw()函数以及您递增的草图级变量(或仅使用预定义的frameCount变量)。

另一个问题是你只是一遍又一遍地绘制相同的颜色矩形。你正在绘制一个灰色矩形,然后在它上面画一个稍小的灰色矩形,然后在它上面画一个稍小的矩形,依此类推。因此,您永远不会看到较小的矩形,因为它们会混合到您正在绘制的第一个矩形中。

运行此程序以更好地了解正在发生的事情:

noStroke();
fill(50,50,50);
rect(0,0,100,100,0);
fill(255, 0, 0);
rect(0,0,100,100,10);
fill(0, 255, 0);
rect(0,0,100,100,20);