Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
设置间隔为的Javascript计时器不工作?_Javascript_Html_Timer_Setinterval - Fatal编程技术网

设置间隔为的Javascript计时器不工作?

设置间隔为的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;

我有一个计时器正在绘制,但根本没有改变。它显示为0:01,并且不按秒添加。这可能与设置间隔有关,但我不确定

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)
可能是导致问题的原因。这是一个清除画布的函数,可以解释闪烁的原因。也许你可以把它换成数字,然后填上数字。嗯,它还在闪烁。还有其他想法吗?我对它进行了测试,如果我加快时间间隔,它就会更快地闪烁,这意味着每次播放时间间隔时,文本都会出现然后消失,而不是直到下一次播放时才出现。我怎样才能让它出现直到下一个播放/