处理环境 - 具有不同延迟的Skech

时间:2015-08-15 16:39:18

标签: processing

我想如果处理中的不同文本可能有不同的延迟时间。我希望他们能够在不同的时间更新,而不是同时更新。

1 个答案:

答案 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种不同的矩形在不同的延迟时间改变颜色。