我想如果处理中的不同文本可能有不同的延迟时间。我希望他们能够在不同的时间更新,而不是同时更新。
答案 0 :(得分:1)
您使用两个变量(一个用于跟踪时间,一个用于存储延迟量)用于基本的独立延迟系统。有关详细信息,请查看this post帖子。如果您需要多个延迟,那么您将拥有多对这些变量。对于基本设置它可能有用,但是如果你有很多延迟,它可能会非常混乱,非常快。
如果有帮助,我开始整理一个基本设置,以便您可以运行延迟a-la javascript' setTimeout()和setInterval():如果你想要一个单一的话,你可以调用setTimeout函数调用一段延迟后,将函数名称作为字符串传递,延迟时间为毫秒:
color firstColor,secondColor,thirdColor;
float rectWidth;
void setup(){
size(400,400);
noStroke();
rectWidth = width / 3.0;
setTimeout("onFirstDelay",1000);
setTimeout("onSecondDelay",1500);
setTimeout("onThirdDelay",1750);
}
void draw(){
fill(firstColor);
rect(0,0,rectWidth,height);
fill(secondColor);
rect(rectWidth,0,rectWidth,height);
fill(thirdColor);
rect(rectWidth*2,0,rectWidth,height);
}
void onFirstDelay(){
firstColor = color(192,0,0);
}
void onSecondDelay(){
secondColor = color(0,192,0);
}
void onThirdDelay(){
thirdColor = color(0,0,192);
}
//this code can be in a separate tab to keep things somewhat tidy
void setTimeout(String name,long time){
new TimeoutThread(this,name,time,false);
}
void setInterval(String name,long time){
intervals.put(name,new TimeoutThread(this,name,time,true));
}
void clearInterval(String name){
TimeoutThread t = intervals.get(name);
if(t != null){
t.kill();
t = null;
intervals.put(name,null);
}
}
HashMap<String,TimeoutThread> intervals = new HashMap<String,TimeoutThread>();
import java.lang.reflect.Method;
class TimeoutThread extends Thread{
Method callback;
long now,timeout;
Object parent;
boolean running;
boolean loop;
TimeoutThread(Object parent,String callbackName,long time,boolean repeat){
this.parent = parent;
try{
callback = parent.getClass().getMethod(callbackName);
}catch(Exception e){
e.printStackTrace();
}
if(callback != null){
timeout = time;
now = System.currentTimeMillis();
running = true;
loop = repeat;
new Thread(this).start();
}
}
public void run(){
while(running){
if(System.currentTimeMillis() - now >= timeout){
try{
callback.invoke(parent);
}catch(Exception e){
e.printStackTrace();
}
if(loop){
now = System.currentTimeMillis();
}else running = false;
}
}
}
void kill(){
running = false;
}
}
注意3种不同的矩形在不同的延迟时间改变颜色。