我正在使用带有Javascript库的Typescript来制作流量模拟器。现在,我想知道红绿灯已经有多长时间了。在我的代码中,如果用于控制灯变量颜色的某个布尔值为真,则红绿灯将变为绿色。我在想我是否能够测量这个布尔变量设置为true的时间。这样我就可以返回红绿灯的持续时间。我的代码太长,无法在其上发布所有代码。但是有些代码与设置交通信号灯有关:
如果我想将红绿灯设置为绿色,则会调用此函数:
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
然后设置了布尔变量,并且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)";
}
然后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;
ctx
是CanvasRenderingContext2D
。无论如何,我可以测量红绿灯的交通灯长度吗?
答案 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
的值将以毫秒为单位。这是大约首次修改时的持续时间。