首页 > 解决方案 > 在处理中通过鼠标单击更改对象颜色

问题描述

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

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

这是我的课程:

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();
    }
  }
}

球类:

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);
    }
  }
}

谢谢您的帮助。

标签: javaarraysobjectprocessing

解决方案


所以这里是工作示例(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() 后将其重置为黑色的原因。因此,您的所有球都有活动标志,可以在绘制之前更改颜色。


推荐阅读