Java 处理,在类中单击鼠标重新绘制

Java 处理,在类中单击鼠标重新绘制,java,processing,Java,Processing,我想在课堂上画一个简单的点击来改变颜色。我试着打印声明,看它是否会重新绘制,但它根本没有重新绘制。点击就行了。有人知道为什么会这样吗? 这是到目前为止的代码 Monster firstmonster; Monster secondmonster; void setup() { size(600,400); firstmonster = new Monster(100,200); secondmonster = new Monster(300,200); firstmonste

我想在课堂上画一个简单的点击来改变颜色。我试着打印声明,看它是否会重新绘制,但它根本没有重新绘制。点击就行了。有人知道为什么会这样吗? 这是到目前为止的代码

Monster firstmonster;
Monster secondmonster;

void setup() {
  size(600,400);
  firstmonster = new Monster(100,200); 
  secondmonster = new Monster(300,200);
  firstmonster.draw();
  secondmonster.draw();
  noLoop();
}

class Monster { 
  float xpos;
  float ypos;
  boolean isAngry;
  int timeAngry;

  Monster(float x, float y) {
    xpos = x;
    ypos = y;
    isAngry = false;
    timeAngry = 0;
  }

  void draw() {
    if(isAngry = true && timeAngry<60){
      print(int(timeAngry));
      timeAngry=timeAngry+1;
      rectMode(CENTER);
      fill(127-timeAngry*5,0,0);
      rect(xpos+100,ypos+100,20,100);
      fill(255,200,200);
      ellipse(xpos+100,ypos+70,60,60);
      ellipse(xpos+81,ypos+70,16,32); 
      ellipse(xpos+119,ypos+70,16,32); 
      line(xpos+90,ypos+150,xpos+80,ypos+160);
      line(xpos+110,ypos+150,xpos+120,ypos+160);
    } else {
      timeAngry = 0;
      rectMode(CENTER);
      print(int(timeAngry));
      fill(127,0,0);
      rect(xpos+100,ypos+100,20,100);
      fill(255,200,200);
      ellipse(xpos+100,ypos+70,60,60);
      ellipse(xpos+81,ypos+70,16,32); 
      ellipse(xpos+119,ypos+70,16,32); 
      line(xpos+90,ypos+150,xpos+80,ypos+160);
      line(xpos+110,ypos+150,xpos+120,ypos+160);

    }
  }
  void mousePressed(){
    poke();
  }
  void poke(){
    isAngry = true;
    print(timeAngry);
    timeAngry=timeAngry+1;
    redraw();
  }
} 

void mousePressed(){
  firstmonster.mousePressed();
}
Monster-firstmonster;
怪物第二怪物;
无效设置(){
尺寸(600400);
第一个怪物=新怪物(100200);
第二个怪物=新怪物(300200);
firstmonster.draw();
第二个怪物。draw();
noLoop();
}
类怪物{
浮动XPO;
浮动YPO;
布尔伊桑格里;
我生气了;
怪物(浮动x,浮动y){
xpos=x;
ypos=y;
isAngry=假;
TimeAnger=0;
}
作废提款(){

如果(isAngry=true&&timeAngry您的代码中没有全局的
void draw(){..}
,那么
重画
就没有什么可触发的。将应该作为帧的一部分绘制的代码移出
setup()
。毫不奇怪,setup是用于一次性设置代码的

void setup() {
  size(600,400);
  firstmonster = new Monster(100,200); 
  secondmonster = new Monster(300,200);
  noLoop();
}

void draw() {
  firstmonster.draw();
  secondmonster.draw();
}
我们应该做到这一点