JavaScript / Typescript - 是否可以测量变量值的设置时间?

时间:2017-11-20 07:25:13

标签: javascript typescript

我正在使用带有Javascript库的Typescript来制作流量模拟器。现在,我想知道红绿灯已经有多长时间了。在我的代码中,如果用于控制灯变量颜色的某个布尔值为真,则红绿灯将变为绿色。我在想我是否能够测量这个布尔变量设置为true的时间。这样我就可以返回红绿灯的持续时间。我的代码太长,无法在其上发布所有代码。但是有些代码与设置交通信号灯有关:

  1. 如果我想将红绿灯设置为绿色,则会调用此函数:

    setDirAtInter(dir: TLDir, loc: number){
      //North-South
      if(dir == 0){
        this.intersections_arr[loc].NS = true;
      }
      //East-West
      else if(dir == 1){
        this.intersections_arr[loc].EW = true;        
      }
    }
    

    intersection_arr是一个包含intersection class

  2. 实例的数组
  3. 然后设置了布尔变量,并且intersection类内的代码会因设置交通灯颜色而受到影响:

     if(this.NS == true){
       this.right = "rgba(255,0,0,0.4)";
       this.left = "rgba(255,0,0,0.4)";
       this.top = "rgba(0,255,0,0.4)";
       this.bottom = "rgba(0,255,0,0.4)";
     }
    
  4. 然后intersection类内的以下代码会受到影响以绘制红绿灯:

    this.ctx.save();
    if(this.top == "rgba(0,255,0,0.4)"){
       //green
       var shadow_color = 'rgba(0,255,0,1)';
    }
    else{
       var shadow_color = 'rgba(255,0,0,1)';
    }
    
    //console.log();
    this.ctx.fillStyle = shadow_color;
    this.ctx.shadowColor = shadow_color
    this.ctx.shadowOffsetY = -2;
    this.ctx.shadowBlur = 2;
    /**
      * Right Traffic Light at Top side
    */
      this.ctx.fillRect(this.x+4,this.y-2,6,6);
      this.ctx.fill();
      this.ctx.restore();
      this.ctx.shadowOffsetX = undefined;
      this.ctx.shadowBlur = undefined;
    

    ctxCanvasRenderingContext2D。无论如何,我可以测量红绿灯的交通灯长度吗?

1 个答案:

答案 0 :(得分:0)

我想,没有内置的方法可以做到这一点。使用setInterval并继续检查变量的值,直到它发生变化。

let value = true;
let time = 0;
let previousValue = value;
const resolution = 1000; // 1 second
const handle = setInterval(() => {
  previousValue === value ? time += resolution : clearInterval(handle);
}, resolution);

time的值将以毫秒为单位。这是大约首次修改时的持续时间。