画布800*800,当鼠标按住时,在中间200上下像素限定范围内随机生成不同样式的白云,白云一直向内移动,越来越小,逐渐消失不见,当鼠标松开时,停止生成白云
时间: 2023-10-23 08:09:39 浏览: 126
这是一个比较复杂的需求,需要使用Processing语言来实现。以下是一个大致的实现思路:
1. 定义一个Cloud类,包含白云的位置、大小、移动速度、形状等属性,以及绘制白云的方法。
2. 在Processing的setup()函数中,创建一个大小为800*800的画布,并定义一个Cloud类型的空数组clouds,用于存储所有生成的白云。
3. 在Processing的draw()函数中,首先判断鼠标是否按下。如果鼠标按下,则判断鼠标位置是否在限定范围内,如果是,则随机生成一个Cloud对象,并将其添加到clouds数组中。然后遍历clouds数组,分别更新每个白云的位置、大小、形状等属性,并调用其绘制方法。最后删除已经消失的白云对象。
4. 在Processing的mouseReleased()函数中,清空clouds数组,停止生成白云。
下面是一个简单的示例代码,供参考:
```
Cloud[] clouds;
void setup() {
size(800, 800);
clouds = new Cloud[0];
}
void draw() {
background(255);
if (mousePressed && mouseY > 300 && mouseY < 500) {
Cloud cloud = new Cloud(random(200, 600), random(300, 500));
clouds = append(clouds, cloud);
}
for (int i = clouds.length - 1; i >= 0; i--) {
clouds[i].update();
clouds[i].display();
if (clouds[i].isOffscreen()) {
clouds = shorten(clouds);
}
}
}
void mouseReleased() {
clouds = new Cloud[0];
}
class Cloud {
float x, y, size, speed, angle, alpha;
Cloud(float x, float y) {
this.x = x;
this.y = y;
size = random(50, 100);
speed = random(1, 3);
angle = random(TWO_PI);
alpha = 255;
}
void update() {
x += cos(angle) * speed;
y += sin(angle) * speed;
size *= 0.99;
alpha -= 2;
}
void display() {
noStroke();
fill(255, alpha);
ellipse(x, y, size, size * 0.7);
ellipse(x + size * 0.3, y - size * 0.3, size * 0.8, size * 0.6);
ellipse(x - size * 0.3, y + size * 0.3, size * 0.8, size * 0.6);
}
boolean isOffscreen() {
return x < -size || x > width + size || y < -size || y > height + size || alpha <= 0;
}
}
```
阅读全文