【问题标题】:Change object color by mouse click in Processing在处理中通过鼠标单击更改对象颜色
【发布时间】:2020-07-31 10:07:10
【问题描述】:

我正在处理一个学校项目(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);
    }
  }
}

感谢您的帮助。

【问题讨论】:

    标签: java arrays object processing


    【解决方案1】:

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

    【讨论】:

    • 现在我明白了,我需要合并一个布尔值来进行完整的距离测试。非常感谢!
    猜你喜欢
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    相关资源
    最近更新 更多