Java 处理绘制一个矩形并保留一段时间
所以我制作了一个简单的程序,当鼠标点击一个按钮时,它的目标是在屏幕上画一个矩形,如果是左键,它在屏幕的左半部分画一个矩形,如果是右键,它在屏幕的右半部分画一个矩形。 问题是,我使用for循环使rect连续绘制了一段时间,但它没有发生 这是我的密码: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);
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
}