processing绘制许多圆,圆不消失且绘制速度越来越快,点击数标时再一起消失
时间: 2024-02-02 08:03:50 浏览: 17
可以使用Processing中的ArrayList来存储圆的信息。每次绘制时,遍历ArrayList中的圆,更新它们的位置和大小,然后绘制出来。每当用户点击屏幕时,遍历ArrayList中的圆,检查哪些圆被点击了,然后将它们从ArrayList中移除,这样它们就会消失了。
以下是一个示例代码,实现了上述功能:
```java
import java.util.ArrayList;
ArrayList<Circle> circles = new ArrayList<Circle>();
void setup() {
size(600, 600);
noStroke();
}
void draw() {
background(255);
for (int i = circles.size()-1; i >= 0; i--) {
Circle c = circles.get(i);
c.update();
c.display();
if (c.isOut()) {
circles.remove(i);
}
}
}
void mousePressed() {
for (int i = circles.size()-1; i >= 0; i--) {
Circle c = circles.get(i);
if (c.contains(mouseX, mouseY)) {
circles.remove(i);
}
}
}
class Circle {
float x, y, r, speed;
Circle(float x, float y) {
this.x = x;
this.y = y;
r = random(20, 50);
speed = random(1, 5);
}
void update() {
y += speed;
r += 0.5;
}
void display() {
fill(random(255), random(255), random(255));
ellipse(x, y, r, r);
}
boolean contains(float px, float py) {
float d = dist(px, py, x, y);
if (d < r/2) {
return true;
} else {
return false;
}
}
boolean isOut() {
if (y > height+r) {
return true;
} else {
return false;
}
}
}
```
在这个示例中,Circle类表示圆的信息。它有四个属性:x, y表示圆的位置,r表示半径,speed表示下落速度。它有四个方法:update()用于更新圆的位置和大小,display()用于绘制圆,contains()用于检查一个点是否在圆内,isOut()用于检查圆是否已经超出屏幕范围。
在setup()函数中,我们初始化了窗口大小,并且禁用了轮廓线。
在draw()函数中,我们遍历ArrayList中的所有圆,更新它们的位置和大小,然后绘制出来。如果一个圆已经超出屏幕范围,我们就将它从ArrayList中移除。
在mousePressed()函数中,我们遍历ArrayList中的所有圆,检查哪些圆被点击了,然后将它们从ArrayList中移除。
最后,我们创建了一个ArrayList来存储所有的圆。在mousePressed()函数中,我们使用ArrayList的remove()方法来移除一个元素。在draw()函数中,我们使用ArrayList的get()方法来获取一个元素。注意,在遍历ArrayList时,我们要从后往前遍历,这是因为如果我们从前往后遍历,当我们移除一个元素时,后面的元素会向前移动,导致一些元素被跳过。