请用processing语言,画5个矩形,矩形在画布中随机移动,矩形能够在鼠标移动到自身旁边时慢速弹开,鼠标由波点替代,
时间: 2023-06-18 14:01:57 浏览: 72
画矩形并且能移动
以下是使用 Processing 语言实现的代码:
```java
int rectSize = 50; // 矩形的大小
int rectSpeed = 5; // 矩形的移动速度
int rectCount = 5; // 矩形的数量
float minDist = 75; // 鼠标与矩形之间的最小距离
float spring = 0.05; // 弹簧效果的强度
float friction = 0.9; // 弹簧效果的摩擦力
PVector[] rects = new PVector[rectCount]; // 存储矩形的位置
PVector mousePos; // 鼠标的位置
void setup() {
size(400, 400);
rectMode(CENTER);
for (int i = 0; i < rectCount; i++) {
rects[i] = new PVector(random(width), random(height));
}
}
void draw() {
background(255);
noStroke();
fill(0);
// 绘制矩形
for (int i = 0; i < rectCount; i++) {
rect(rects[i].x, rects[i].y, rectSize, rectSize);
}
// 更新矩形的位置
for (int i = 0; i < rectCount; i++) {
PVector dir = PVector.random2D();
dir.mult(rectSpeed);
rects[i].add(dir);
// 矩形在边界处弹回
if (rects[i].x < rectSize / 2 || rects[i].x > width - rectSize / 2) {
rects[i].x = constrain(rects[i].x, rectSize / 2, width - rectSize / 2);
}
if (rects[i].y < rectSize / 2 || rects[i].y > height - rectSize / 2) {
rects[i].y = constrain(rects[i].y, rectSize / 2, height - rectSize / 2);
}
// 如果鼠标在矩形旁边,应用弹簧效果
float dist = rects[i].dist(mousePos);
if (dist < minDist) {
PVector force = PVector.sub(rects[i], mousePos);
force.normalize();
force.mult((minDist - dist) * spring);
rects[i].add(force);
}
// 应用摩擦力
rects[i].mult(friction);
}
}
void mouseMoved() {
mousePos = new PVector(mouseX, mouseY);
}
```
以上代码中,我们使用了 Processing 自带的 `PVector` 类来存储矩形和鼠标的位置,并且使用了 `rectMode(CENTER)` 来让矩形的位置指定为中心点。在 `draw()` 函数中,我们首先绘制矩形,然后更新矩形的位置,如果矩形到达边界,就弹回;如果鼠标在矩形旁边,就应用弹簧效果,使矩形缓慢弹开;最后应用摩擦力,使矩形逐渐停止。在 `mouseMoved()` 函数中,我们记录了鼠标的位置,以便在 `draw()` 函数中使用。
阅读全文