下面的代码应该使形状闪烁两次,我从根目录检查方法三倍,并且99%确定这些方法是正确的(如果需要,我会发布该代码)。什么是在屏幕上暂停根当前暂停状态几秒的最佳方法?
noLoop();
root.setVal(newVal);
root.highlight(0,255,0);
root.setopacity(200);
redraw();
try {Thread.sleep((long)1500);}
catch (InterruptedException ex) {println("Error!");}
root.setopacity(0);
redraw();
try {Thread.sleep((long)1500);}
catch (InterruptedException ex) {println("Error!");}
root.setopacity(200);
root.clearHL();//just to make sure I repeated these methods
root.highlight(0,255,0);
redraw();
try {Thread.sleep((long)1500);}
catch (InterruptedException ex) {println("Error!");}
root.clearHL();
redraw();
loop();
return root;
答案 0 :(得分:2)
你只能有一个线程正在进行绘图,如果你用sleep
等来阻塞该线程,它将“挂起”,直到它有机会退出你的代码并返回到渲染代码里面JRE。
有很多关于它的教程,谷歌是你的朋友!
例如:http://www.java-tips.org/java-se-tips/java.awt/how-to-create-animation-paint-and-thread.html
当你在一个页面上绘图时想一想,然后不时地从你的笔记本中拉出页面进行显示。如果你用10秒画一个圆圈然后把它擦掉就没关系了。重要的是它显示在页面上的内容。
答案 1 :(得分:1)
我不确定我是否遇到了问题,而且代码不可运行,但是......也许你需要一个更简单的方法?你自己做的小计时器?问题是draw()在draw()结束时渲染帧之前执行所有指令。因此,如果你停止draw(),它将暂停,不进行任何绘制,然后继续进行所有更改并在结束时绘制。我的意思是,如果我这样做:
draw(){
fill(0);
ellipse(10,10,10,10);
delay(1000);
fill(255,255,0);
ellipse(10,10,10,10);
}
在渲染发生之前,我将永远不会看到黄色覆盖的黑色椭圆......在绘制结束时。但该节目每帧都要挂一秒......
所以也许一个简单的计时器可以为你做。这里有一个计时器的一般示例,您可以尝试根据自己的需要进行调整:
PFont font;
String time = "000";
int initialTime;
int interval = 1000;
int times;
color c = color(200);
void setup() {
size(300, 300);
font = createFont("Arial", 30);
background(255);
fill(0);
smooth();
//set the timer as setup is done
initialTime = millis();
}
void draw()
{
background(255);
//compare elapsed time if bigger than interval...
if (millis() - initialTime > interval)
{
//display the time
time = nf(int(millis()/1000), 3);
// reset timer
initialTime = millis();
//increment times
times++;
}
// an arbitrary ammount
if (times == 3) {
//do somethng different
c = color(random(255), random(255), random(255));
// reset times
times = 0;
}
//draw
fill(0);
text(time, width/2, height/2);
fill(c);
ellipse(75, 75, 30, 30);
}