该效果是借鉴了Daniel Shiffman的代码,他写的Learning Processing以及The nature of code是学习Processing语言以及生成艺术(Generative Art)学生必看的经典。
首先我们先通过雨滴对象做出一滴雨滴滴下的效果:
Drop drop;
void setup(){
size(640, 360);
drop = new Drop();
}
void draw(){
background(230, 230, 250);
drop.fall();
drop.show();
}
class Drop {
float x = width/2;
float y = 0;
float yspeed = 1;
void fall(){
y = y + yspeed;
}
void show(){
stroke(138, 43, 226);
line(x, y, x, y+10);
}
}
我们创建了Drop这个类,并实例化drop对象,通过fall
函数改变雨滴的位置,show
函数显示雨滴的形状。就这样,我们实现了一滴雨滴掉落的样子。
接着我们需要同时下落500滴雨滴,要使用数组。
首先我们要建立数组:Drop drop
变为 Drop[] drops = new Drop[500]
,创建一个含有500个元素的数组。
然后在setup
中,初始化数组中的每个元素。
for(int i = 0; i<500; i++){
drops[i] = new Drop();
}
最后需要在draw
中,让每个雨滴显示出来:
for(int i = 0; i<500; i++){
drops[i].fall();
drops[i].show();
}
还需要在fall
函数中,让雨滴到达最下面后,重新回到页面的顶部再坠落:
if (y > height){
y = random(-100, -200);
}
改写后的代码如下所示:
Drop[] drops = new Drop[500];
void setup(){
size(640, 360);
for(int i = 0; i<500; i++){
drops[i] = new Drop();
}
}
void draw(){
background(230, 230, 250);
for(int i = 0; i<500; i++){
drops[i].fall();
drops[i].show();
}
}
class Drop {
float x = random(0, width);
float y = random(-100, -200);
float yspeed = random(4, 10);
void fall(){
y = y + yspeed;
if (y > height){
y = random(-100, -200);
}
}
void show(){
stroke(138, 43, 226);
line(x, y, x, y+random(1,15));
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。