在我的主课中,我创建了一个数组来生成一些绿色圆圈。当我用布尔值单击其中一个时,我试图让背景发生变化,当在圆圈上单击时,应该会实现...我对整个编程很陌生,我不太确定如何解决这个问题..我真的不知道绿色圆圈的x和y位置的数据显示在哪里以及klicked函数应该如何找到它们,因为它们都是在随机位置和其他类中创建的。这是到目前为止我的代码:
class Gesicht {
//Eigenschaften
boolean fail = false;
float whEllipse= 200;
float yPos = random(-whEllipse, height);
float xPos = random(-whEllipse, height);
float xSpeed = 1;
float P = 1;
//Constructor
Gesicht() {
// this.yPos = yPos;
// this.xPos = xPos;
}
//Methoden/Funktionen
void move() {
//paint();
xPos += xSpeed;
yPos += (P*sin(radians(xPos))+1); //+1 macht dass sich das Gesicht langsam runter bewegt.
if (xPos>= width+whEllipse/2) {
// P = P+1; Maybe falls ich größere Amplitude will
xPos = -whEllipse/2;
}
if (yPos >= height+whEllipse/2) {
yPos = random(-whEllipse, height/2);
xPos = random(-200, whEllipse/2);
}
}
boolean klicked() {
if (mouseX > xPos-whEllipse/2 && mouseX < xPos+whEllipse/2
&& mouseY > yPos-whEllipse/2 && mouseY < yPos+whEllipse/2
&& mousePressed) {
return true;
}
return false;
}
void klick() {
if (klicked()) {
fail = true;
}
}
void spawn() {
move();
fill(0, 255, 0);
circle(xPos, yPos, whEllipse);
}
}
这是我尝试放置功能的类。
int farbe = 255;
Gesicht[] grün;
Gesichter[] rot;
Gesichterer[] blau;
void settings() {
size(700, 700);
}
void setup() {
rot = new Gesichter[10];
for ( int i = 0; i< rot.length; i++) {
rot[i]= new Gesichter();
}
grün = new Gesicht[15];
for ( int i = 0; i< grün.length; i++) {
grün[i]= new Gesicht();
}
blau = new Gesichterer[20];
for ( int i = 0; i< blau.length; i++) {
blau[i]= new Gesichterer();
}
}
void draw() {
background(farbe);
if(variable.klicked()){
background(150,0,0);
}
for ( int i = 0; i< grün.length; i++) {
grün[i].spawn();
}
for ( int i = 0; i< rot.length; i++) {
rot[i].spawn();
}
for (int i = 0; i< blau.length; i++) {
blau[i].spawn();
}
}
这是我的主课。
功能目前永远不会实现...我希望有人可以帮助我:// 将非常感激。
您可能会在不清理代码的情况下努力尝试,这从长远来看会导致更多麻烦。
我这样说是基于以下几点:
klicked()
,但也有一个klick()
方法,但作用不大:klick()
应该足够了Gesicht
类,但是您另外尝试实例化 Gesichter
和 Gesichterer
,它们不存在(至少在您发布的代码中不存在)if(variable.klicked()){ background(150,0,0); }
指的是一个名为 variable
的不可用变量(也许是占位符?)。即使该变量存在,红色背景也只会在 klicked()
为 true 时短暂闪烁。不过你已经很接近了:
klicked()
方法可以满足你的需求farbe
已存储背景颜色你可以这样做:
class Gesicht {
//Eigenschaften
boolean fail = false;
float whEllipse= 200;
float yPos = random(-whEllipse, height);
float xPos = random(-whEllipse, height);
float xSpeed = 1;
float P = 1;
//Constructor
Gesicht() {
// this.yPos = yPos;
// this.xPos = xPos;
}
//Methoden/Funktionen
void move() {
//paint();
xPos += xSpeed;
yPos += (P*sin(radians(xPos))+1); //+1 macht dass sich das Gesicht langsam runter bewegt.
if (xPos>= width+whEllipse/2) {
// P = P+1; Maybe falls ich größere Amplitude will
xPos = -whEllipse/2;
}
if (yPos >= height+whEllipse/2) {
yPos = random(-whEllipse, height/2);
xPos = random(-200, whEllipse/2);
}
}
boolean klicked() {
if (mouseX > xPos-whEllipse/2 && mouseX < xPos+whEllipse/2
&& mouseY > yPos-whEllipse/2 && mouseY < yPos+whEllipse/2
&& mousePressed) {
return true;
}
return false;
}
void klick() {
if (klicked()) {
fail = true;
}
}
void spawn() {
move();
fill(0, 255, 0);
circle(xPos, yPos, whEllipse);
}
}
int farbe = 255;
Gesicht[] green;
Gesicht[] rot;
Gesicht[] blau;
void settings() {
size(700, 700);
}
void setup() {
//rot = new Gesicht[10];
//for ( int i = 0; i< rot.length; i++) {
// rot[i]= new Gesicht();
//}
//green = new Gesicht[15];
//for ( int i = 0; i< green.length; i++) {
// green[i]= new Gesicht();
//}
blau = new Gesicht[20];
for ( int i = 0; i< blau.length; i++) {
blau[i]= new Gesicht();
}
}
void draw() {
background(farbe);
//if (variable.klicked()) {
// background(150, 0, 0);
//}
//for ( int i = 0; i< green.length; i++) {
// if(green[i].klicked()){
// farbe = color(red(farbe), random(255), blue(farbe));
// }
// green[i].spawn();
//}
//for ( int i = 0; i< rot.length; i++) {
// rot[i].spawn();
//}
for (int i = 0; i< blau.length; i++) {
if(blau[i].klicked()){
farbe = color(red(farbe), green(farbe), random(255));
}
blau[i].spawn();
}
}
(为了简单/易于测试,仅取消注释一组圆圈。请根据需要随意调整)
如果您希望背景仅在单击时更改一次(而不是在按下鼠标时连续更改),则可以添加的最后一项操作是去抖动。这个想法是使用状态/变量来跟踪之前是否按下了按钮,或者在状态再次改变之前只改变背景一次。 (您可以在类中使用额外的布尔变量来实现这一点,或者可能更简单,使用 mouseClicked() 回调来迭代数组,只是为了检查哪个实例已
klicked()
相应地更改背景)。