Java 处理绘制一个矩形并保留一段时间

Java 处理绘制一个矩形并保留一段时间,java,processing,draw,Java,Processing,Draw,所以我制作了一个简单的程序,当鼠标点击一个按钮时,它的目标是在屏幕上画一个矩形,如果是左键,它在屏幕的左半部分画一个矩形,如果是右键,它在屏幕的右半部分画一个矩形。 问题是,我使用for循环使rect连续绘制了一段时间,但它没有发生 这是我的密码: int bab = 0; void setup() { size(500, 500); frameRate(24); background(255); int b = 0; } void draw() { background(255);

所以我制作了一个简单的程序,当鼠标点击一个按钮时,它的目标是在屏幕上画一个矩形,如果是左键,它在屏幕的左半部分画一个矩形,如果是右键,它在屏幕的右半部分画一个矩形。 问题是,我使用for循环使rect连续绘制了一段时间,但它没有发生

这是我的密码:

 int bab = 0;


void setup() {
size(500, 500);
frameRate(24);
background(255);
int b = 0;


}

void draw() {
background(255);
println(bab);
bab++;
if(mousePressed == true && mouseButton == LEFT) {
fill(100, 0, 0);
for(int i = 0; i <= 20000; i++) {
  fill(100, 0, 0);
  rect(0, 200, width/2, 50);
  println("The value is: " + i);
}
background(255);
}else if(mousePressed == true && mouseButton == RIGHT) {
fill(255, 255, 0);
for(int i = 0; i <= 200; i++) {
  rect(width/2, 0, width/2, height);
}
}

}
intbab=0;
无效设置(){
大小(500500);
帧率(24);
背景(255);
int b=0;
}
作废提款(){
背景(255);
println(bab);
bab++;
if(mousePressed==true&&mouseButton==LEFT){
填充(100,0,0);

for(int i=0;ifor循环使用
i
作为控制/来表示循环中的每个迭代。在这个循环中也有绘图,因此每个迭代都应该绘制一些东西

然而,在循环中没有任何地方使用
i
变量——您只将其打印到控制台

for(int i = 0; i <= 20000; i++) {
  fill(100, 0, 0); // does not use i
  rect(0, 200, width/2, 50); // does not use i
  println("O valor é: " + i);
}
对于(int i=0;i请尝试以下代码:

long leftOn = 0;
long rightOn = 0;

void draw() {

  // clear window buffer (white color)
  background(255);

  if (mousePressed == true && mouseButton == LEFT) {

    // remember timestamp when left button was pressed in variable leftOn
    leftOn = millis();
    rightOn = 0;

  } else if (mousePressed == true && mouseButton == RIGHT) {

    // remember timestamp when right button was pressed
    rightOn = millis();
    leftOn = 0;

  }

  // now is current timestamp
  long now = millis();

  /*
   * if now - last left click distance is lower than 1000 ms - draw left rect
   * else if now - right left click distance is lower than 1000 ms - draw right rect
   */ 
  if (now - leftOn <= 1000*1) {
    fill(0,255,0);
    rect(0,0,width/2,height);
  } else if (now - rightOn <= 1000*1) {
    fill(255,255,0);
    rect(width/2, 0, width/2, height);
  } 

  // else - nothing is drawn in this frame, so window will be empty in this frame 

}
long leftOn=0;
long-rightOn=0;
作废提款(){
//清除窗口缓冲区(白色)
背景(255);
if(mousePressed==true&&mouseButton==LEFT){
//还记得在变量leftOn中按下left按钮时的时间戳吗
leftOn=millis();
rightOn=0;
}else if(mousePressed==true&&mouseButton==RIGHT){
//还记得右键按下时的时间戳吗
rightOn=millis();
leftOn=0;
}
//现在是当前时间戳
long now=millis();
/*
*如果现在-上次左键单击距离小于1000毫秒-绘制左矩形
*否则,如果现在-左键单击距离小于1000毫秒-绘制右矩形
*/ 

如果(现在-leftOn)应该发生什么?你连续绘制是什么意思?我的意思是让矩形在屏幕上保持一段时间,就像它绘制矩形保持一段时间一样(在这种情况下,绘制矩形200帧,例如)然后清除屏幕。不,你不能让矩形保持在屏幕上,不可能。谢谢你的帮助,但我实际上希望代码重复完全相同的事情,在这种情况下,多次绘制相同的矩形,以实现使矩形在屏幕上出现几秒钟(即20秒)的结果然后消失。感谢它确实起作用了,我只是不明白为什么我的代码不起作用,因为在我看来,当我循环draw rect时,处理过程会多次绘制rect(在本例中停止draw()循环),但它没有发生。为什么?你能解释一下吗?当你调用
rect()
eliple()时
或任何其他绘制方法,此绘制仅在缓冲区(一些分配的内存)中完成-不在屏幕上。当
draw()
方法完成时,处理将缓冲区移动到屏幕上,等待一段时间(即15毫秒,取决于帧速率),然后再次调用
draw()
方法。。。
long leftOn = 0;
long rightOn = 0;

void draw() {

  // clear window buffer (white color)
  background(255);

  if (mousePressed == true && mouseButton == LEFT) {

    // remember timestamp when left button was pressed in variable leftOn
    leftOn = millis();
    rightOn = 0;

  } else if (mousePressed == true && mouseButton == RIGHT) {

    // remember timestamp when right button was pressed
    rightOn = millis();
    leftOn = 0;

  }

  // now is current timestamp
  long now = millis();

  /*
   * if now - last left click distance is lower than 1000 ms - draw left rect
   * else if now - right left click distance is lower than 1000 ms - draw right rect
   */ 
  if (now - leftOn <= 1000*1) {
    fill(0,255,0);
    rect(0,0,width/2,height);
  } else if (now - rightOn <= 1000*1) {
    fill(255,255,0);
    rect(width/2, 0, width/2, height);
  } 

  // else - nothing is drawn in this frame, so window will be empty in this frame 

}