在处理中通过鼠标单击更改对象颜色

Change object color by mouse click in Processing

我正在处理一个学校项目(Java 模式)。任务是在单击时更改 Ball 对象的颜色。

不幸的是,我只能更改一个对象。如果我点击屏幕,所有对象都会改变颜色。

这是我的 classes:

Ball[] barray= new Ball[20]; 

void setup(){
  size(400,400);
  for (int i=0; i<20; i++){
    barray[i] = new Ball();
  }
  strokeWeight(40);
}
void draw(){
  background(255,255,255);
  for (int i=0; i<barray.length; i++){
    barray[i].paint(); 
  }
  for (int i=0; i<barray.length; i++){
    barray[i].move(); 
  }
  
  if (mousePressed) {
    for (int i = 0; i < barray.length; i++) {
      barray[i].testHint();
    }
  }
}

球class:

public class Ball {
  int x, diffx;
  int y, diffy;
  public Ball() {
    x= (int) random(1, width);
    diffx= (int) random(1, 5);
    y= (int) random(1, height);
    diffy= (int) random(1, 5);
  }
  public void move(){
    x += diffx;
    if (x<0 || x> width){
      diffx *= -1;
    }
    y += diffy;
    if (y<0 || y> height){
      diffy *= -1;
    }
  }
  public void paint(){
    point(x,y);
  }
  
  public void testHint() {
    float d = dist(mouseX,mouseY,this.x,this.y);
    if ( d < 5){
      stroke(255,0,0);
      point(this.x,this.y);
    }
  }
}

感谢您的帮助。

所以这是工作示例 (http://hello.processing.org/display/#@-MDZNtlpRsdS_3GSlvvg):

 public class Ball {
     int x, diffx;
     int y, diffy;
     bool active;
     public Ball() {
         active = false;
         x= (int) random(1, width);
         diffx= (int) random(1, 5);
         y= (int) random(1, height);
         diffy= (int) random(1, 5);
     }

     public void move(){
         x += diffx;
         if (x<0 || x> width){
             diffx *= -1;
         }
         y += diffy;
         if (y<0 || y> height){
             diffy *= -1;
         }
     }

     public void paint(){
         if(active) {
             stroke(255,0,0);
         }
         point(x,y);
         stroke(0,0,0);
     }

     public void testHint() {
         float d = dist(mouseX,mouseY,this.x,this.y);
         if ( d < 5 ) {
             active = true;
         }
     }
 }

 Ball[] barray= new Ball[20]; 

 void setup(){
     size(400,400);
     for (int i=0; i<20; i++){
         barray[i] = new Ball();
     }
     strokeWeight(40);
 }
 void draw(){
     background(255,255,255);
     for (int i=0; i<barray.length; i++){
         barray[i].paint(); 
     }
     for (int i=0; i<barray.length; i++){
         barray[i].move(); 
     }

     if (mousePressed) {
         for (int i = 0; i < barray.length; i++) {
             barray[i].testHint();
         }
     }
 }

您在描边函数中提供的颜色将对之后的所有绘画都有效,因此您必须在 point() 调用后将其重置回黑色。从而在绘制之前为所有球设置活动标志以更改颜色。