设置间隔为的Javascript计时器不工作?
我有一个计时器正在绘制,但根本没有改变。它显示为0:01,并且不按秒添加。这可能与设置间隔有关,但我不确定设置间隔为的Javascript计时器不工作?,javascript,html,timer,setinterval,Javascript,Html,Timer,Setinterval,我有一个计时器正在绘制,但根本没有改变。它显示为0:01,并且不按秒添加。这可能与设置间隔有关,但我不确定 function drawTimer() { var fontSize = 15; graph.lineWidth = playerConfig.textBorderSize; graph.fillStyle = playerConfig.textColor; graph.strokeStyle = playerConfig.textBorder;
function drawTimer() {
var fontSize = 15;
graph.lineWidth = playerConfig.textBorderSize;
graph.fillStyle = playerConfig.textColor;
graph.strokeStyle = playerConfig.textBorder;
graph.miterLimit = 1;
graph.lineJoin = 'round';
graph.textAlign = 'right';
graph.textBaseline = 'middle';
graph.font = 'bold ' + fontSize + 'px sans-serif';
var gameTimeMinutes = 0;
var gameTimeSeconds = 1;
var gameTime = "";
function addTime() {
gameTimeSeconds += 1;
}
setInterval(addTime, 1000);
if (gameTimeSeconds < 10) {
gameTime = gameTimeMinutes + " : 0" + gameTimeSeconds;
} else {
gameTime = gameTimeMinutes + " : " + gameTimeSeconds;
}
if (gameTimeSeconds == 60) {
gameTimeSeconds = 0;
gameTimeMinutes++;
}
graph.strokeText(gameTime, 50, 50);
graph.fillText(gameTime, 50, 50);
}
函数drawTimer(){
var-fontSize=15;
graph.lineWidth=playerConfig.textBorderSize;
graph.fillStyle=playerConfig.textColor;
graph.strokeStyle=playerConfig.textBorder;
graph.miterLimit=1;
graph.lineJoin='round';
graph.textAlign='right';
graph.textb基线='中间';
graph.font='bold'+fontSize+'px sans serif';
var gameTimeMinutes=0;
var gameTimeSeconds=1;
var gameTime=“”;
函数addTime(){
游戏时间秒+=1;
}
设置间隔(addTime,1000);
如果(游戏时间秒<10){
游戏时间=游戏时间分钟数+“:0”+游戏时间秒;
}否则{
gameTime=gameTimeMinutes+“:”+gameTimeSeconds;
}
如果(游戏时间秒==60){
游戏时间秒=0;
gameTimeMinutes++;
}
strokeText(游戏时间,50,50);
fillText(游戏时间,50,50);
}
谢谢。每隔1秒调用一次addTime()
,但看起来像是行下面的代码,带有setInterval(addTime,1000)代码>只执行一次。也就是说,您的变量gameTime
只设置了一次。您应该重新评估您的逻辑,以便在您的时间间隔中包含这些更改(更新和打印)。setInterval(addTime,1000)
每秒调用addTime
,但由于计时器未被重绘,因此似乎什么也没有发生。您可以通过调用drawTimer
重新绘制计时器,但所有计时器数据都在drawTimer
函数中
多次调用drawTimer
也无济于事,因为每次调用都会重置所有值。您可以通过使用全局变量和函数来管理计时器状态(gameTimeMinutes
、gameTimeSeconds
和gameTime
)来解决此问题,但您可能希望为此使用对象。您可以阅读有关对象的更多信息
在本例中,创建了一个GameTimer
对象。GameTimer
由一个函数定义,在使用new
关键字创建对象之前,它不会执行任何操作。然后,您可以通过调用对象上的函数gameTimer.addTime()
,gameTimer.draw()
,来addTime
或draw
。或者,您也可以使用update
功能同时执行这两项操作,这是setInterval
的功能
var canvas=document.getElementById(“canvas”);
var-graph=canvas.getContext(“2d”);
变量playerConfig={
文本边框大小:3,
textColor:“白色”,
文本边框:“黑色”
}
函数GameTimer(){
var gameTimeMinutes=0;
var gameTimeSeconds=0;
var gameTime=“”;
this.addTime=函数(){
游戏时间秒+=1;
如果(游戏时间秒<10){
游戏时间=游戏时间分钟数+“:0”+游戏时间秒;
}否则{
gameTime=gameTimeMinutes+“:”+gameTimeSeconds;
}
如果(游戏时间秒==60){
游戏时间秒=0;
gameTimeMinutes++;
}
};
this.draw=函数(){
graph.clearRect(0,0,canvas.width,canvas.height);
var-fontSize=15;
graph.lineWidth=playerConfig.textBorderSize;
graph.fillStyle=playerConfig.textColor;
graph.strokeStyle=playerConfig.textBorder;
graph.miterLimit=1;
graph.lineJoin='round';
graph.textAlign='right';
graph.textb基线='中间';
graph.font='bold'+fontSize+'px sans serif';
strokeText(游戏时间,60,50);
fillText(游戏时间,60,50);
};
this.update=函数(){
这是addTime();
这个.draw();
}.约束(本);
这个.update();
}
var gameTimer=新gameTimer();
设置间隔(gameTimer.update,1000)代码>
请创建代码片段或小提琴!!!所以我们可以理解,每1000毫秒,你所做的就是给一个变量加1。你没有重新画任何东西。您需要将绘图代码添加到addTime函数。这是否意味着我应该在代码中的另一个位置设置间隔?你能给我举个例子,说明我如何让它执行多次吗?太棒了!但有一个问题,每次时间更新时,它都会闪烁,几乎不合格。我如何消除闪烁并切换到下一次?我在上一条评论中的意思是平滑切换*我没有注意到闪烁,尽管我认为graph.clearRect(0,0,canvas.width,canvas.height)
可能是导致问题的原因。这是一个清除画布的函数,可以解释闪烁的原因。也许你可以把它换成数字,然后填上数字。嗯,它还在闪烁。还有其他想法吗?我对它进行了测试,如果我加快时间间隔,它就会更快地闪烁,这意味着每次播放时间间隔时,文本都会出现然后消失,而不是直到下一次播放时才出现。我怎样才能让它出现直到下一个播放/