我正在制作一个生物,需要添加一个移动的背景,所以我选择了气泡。
它本身就可以工作,与猪的运动相同。但是当我将它们组合在一起时,它会在我的文件中给出错误“重复方法 setup()”。
有人有什么建议吗?
Piggy myPiggy;
void setup() {
size(400, 400) ;
background(255) ;
myPiggy = new Piggy();
}
void draw() {
background(255) ;
myPiggy.display();
}
void mouseDragged() {
myPiggy.mouseSmoved(mouseX, mouseY);
}
void setup() {
Bubble[] bubbles = new Bubble[300];
size(640, 360);
for (int i = 0; i < bubbles.length; i++) {
bubbles[i] = new Bubble(random(60));
}
}
void draw() {
background(255);
for (int i = 0; i < bubbles.length; i++) {
bubbles[i].ascend();
bubbles[i].display();
bubbles[i].top();
}
}
class Piggy {
float pgX= 0 ;
float pgY= 0 ;
int stX = 0 ;
int stY = 0 ;
color earColor;
color faceColor;
Piggy() {
stX = width / 2;
stY = height / 2;
}
void display () {
//ears
fill(255,192,203) ;
noStroke() ;
ellipse(stX-90, stY-70, 60, 100) ;
ellipse(stX+90, stY-70, 60, 100) ;
fill(stX-90, stY-70, 40, 80) ;
fill(stX+90, stY-70, 40, 80) ;
// face
fill(255,192,203) ;
ellipse(stX, stY, 250, 220);
// eyes
fill(255) ;
circle(stX-60, stY-30, 40) ;
circle(stX+60, stY-30, 40) ;
// pupil
fill(0) ;
circle(stX-60, stY-25, 15);
circle(stX+60, stY-25, 15);
// nose
fill(253, 89, 157) ;
ellipse(stX, stY+20, 60, 50) ;
fill(253, 144, 214) ;
noStroke() ;
circle(stX-15, stY+20, 20) ;
circle(stX+15, stY+20, 20) ;
//mouth
fill(255) ;
noStroke() ;
arc(stX, stY+60, 50, 40, 0, PI) ;
}
void mouseSmoved(int x, int y) {
stX = x;
stY = y;
}
}
class Bubble {
float x;
float y;
float diameter;
float yspeed;
Bubble(float tempD) {
x = random(width);
y = height;
diameter = tempD;
yspeed = random(0.5, 2.5);
}
void ascend() {
y = y - yspeed;
x = x + random(-2,2);
}
void display() {
stroke(0);
noFill();
//fill(127,100);
ellipse(x, y, diameter, diameter);
}
void top() {
if (y < -diameter/2) {
y = height+diameter/2;
}
}
}
您有两次 setup() 方法,要解决问题,您可以重命名其中一种方法,如果您不想这样做,您可以向其中一种设置添加一个参数
void setup(int p){the code}
您声明了两次设置。对此有多种解决方案:
1:删除其中一项设置。
2:重载该方法。重载方法允许您拥有多个同名的方法,但要求它们具有不同数量的参数。为此,只需为其中一个设置提供一个参数即可。
3:重命名其中一项设置。
看起来您正在使用处理。在这种情况下,正如所指出的,Processing 中的主文件只能有一个
setup()
方法。一个简单的解决方案是将它们的方法体合并到一个设置中并删除第二个,就像这样
void setup() {
size(400, 400) ;
background(255) ;
myPiggy = new Piggy();
Bubble[] bubbles = new Bubble[300];
// You cannot have two size() calls, pick one above or this one
//size(640, 360);
for (int i = 0; i < bubbles.length; i++) {
bubbles[i] = new Bubble(random(60));
}
}
请注意,这不涵盖您尝试合并的代码的其他方面。例如,您需要合并
draw()
才能显示您的小猪以及气泡。
您的代码中有两个 setup() 方法。应该有一个 setup() 方法。如果两个函数中的代码都有用,请将它们合并为一个,这样错误就会消失。
您的代码中有两个名为“setup()”的方法
Piggy myPiggy;
void setup() { // <------------ HERE
size(400, 400) ;
background(255) ;
myPiggy = new Piggy();
}
void draw() {
background(255) ;
myPiggy.display();
}
void mouseDragged() {
myPiggy.mouseSmoved(mouseX, mouseY);
}
void setup() { // <------------ HERE
Bubble[] bubbles = new Bubble[300];
size(640, 360); //<-- this must be the first line in a setup
for (int i = 0; i < bubbles.length; i++) {
bubbles[i] = new Bubble(random(60));
}
}
您需要重命名或编辑代码或删除一个 setup() 才能继续。 https://processing.org/reference/setup_.html
另外,size(x,y) 必须是设置中的第一行,除非您使用 settings() 用变量初始化 size()。