嗨我想为他们输入新的半径并点击按钮时绘制新的圆圈。我应该用鼠标定位它。然而,在我绘制圆形之后,我要么无法绘制新的,要么也无法定位它。
import interfascia.*;
int numCircles = 500;
Circle[] circles = new Circle[numCircles]; // define the array
int k=0;
GUIController c;
IFButton b1;
IFTextField tn;
float bx;
float by;
boolean overBox = false;
boolean locked = false;
float xOffset = 0.0;
float yOffset = 0.0;
float r;
void setup() {
size(1439,800);
smooth();
noStroke();
bx=width/2;
by=height/2;
c = new GUIController (this);
b1 = new IFButton ("Click to draw", 600, 220, 100);
tn=new IFTextField("", 100,20,50);
c.add(b1);
c.add(tn);
}
void draw() {
background(205);
if (mouseX > bx-r && mouseX < bx+r &&
mouseY > by-r && mouseY < by+r) {
overBox = true;
if(!locked) {
}
} else {
overBox = false;
}
circles[k] = new Circle(bx,by,r);
circles[k].display(); // display all the circles
}
void actionPerformed (GUIEvent e) {
if (e.getSource() == b1) {
r=float(tn.getValue());
}
}
class Circle {
float x,y,r; // location
color c; // color
Circle(float x, float y, float r) {
this.x = x;
this.y = y;
this.r = r;
c = color(random(255));
}
void display() {
ellipse(x,y,10,10); // a circle at position xy
}
}
void mousePressed() {
if(overBox) {
locked = true;
} else {
locked = false;
}
xOffset = mouseX-bx;
yOffset = mouseY-by;
}
void mouseDragged() {
if(locked) {
bx = mouseX-xOffset;
by = mouseY-yOffset;
}
}
void mouseReleased() {
locked = false;
overBox=false;
}
答案 0 :(得分:1)
您有两个主要选择:
选项1:停止从background()
功能调用draw()
功能。这就是清除旧框架的原因。如果您将其删除(或将其移至setup()
,则您的旧框架将永远不会被清除。
选项2:将州存储在一组数据结构中。您可以考虑使用数组来存储每个圆的位置和半径。 (或者更好的是,创建一个Circle
类并将其存储在ArrayList
中。)然后绘制场景,只需遍历数据结构并绘制所有圆圈。
另一个选择是使用屏幕外PGraphics
缓冲区。