Javascript JS:启动计时器后,正确的计时方法是什么?

Javascript JS:启动计时器后,正确的计时方法是什么?,javascript,setinterval,Javascript,Setinterval,我正在做一个简单的反应计时器游戏。唯一让我感到困惑的是,我在计算回答问题所需的时间 显示用户输入提示后,我将运行此功能: var addScore = function () { if (playing) { setInterval(function () { score += 10; }, 10) } }; 因此,一旦玩家开始玩这个函数开始,并在每10毫秒后向分数加10。我试着玩,有时我的分数是5-7秒,即使我一回答就回

我正在做一个简单的反应计时器游戏。唯一让我感到困惑的是,我在计算回答问题所需的时间

显示用户输入提示后,我将运行此功能:

var addScore = function () {
    if (playing) {
        setInterval(function () {
            score += 10;
        }, 10)
    }
};
因此,一旦玩家开始玩这个函数开始,并在每10毫秒后向分数加10。我试着玩,有时我的分数是5-7秒,即使我一回答就回答。是因为我把时间加错了吗

小提琴:

  • 您是否正在清除间隔?因为如果不是,那些
    setInterval
    函数将累加,每10毫秒左右将
    10
    添加到分数中

  • setInterval
    不是很精确,您的函数可能会延迟10毫秒以上。(不是像你的例子中那样把10毫秒变成5000毫秒,而是有一点。)这是一个更好的主意,不涉及计时器:

    var questionPosedTime = new Date();
    poseTheQuestion();
    onAnswerReceived(function() {
      var answerReceivedTime = new Date();
      var answeringDelayInMilliseconds = answerReceivedTime - questionPosedTime;
      adjustScore(answeringDelayInMilliseconds);
    });
    
      • 您是否正在清除间隔?因为如果不是,那些
        setInterval
        函数将累加,每10毫秒左右将
        10
        添加到分数中

      • setInterval
        不是很精确,您的函数可能会延迟10毫秒以上。(不是像你的例子中那样把10毫秒变成5000毫秒,而是有一点。)这是一个更好的主意,不涉及计时器:

        var questionPosedTime = new Date();
        poseTheQuestion();
        onAnswerReceived(function() {
          var answerReceivedTime = new Date();
          var answeringDelayInMilliseconds = answerReceivedTime - questionPosedTime;
          adjustScore(answeringDelayInMilliseconds);
        });
        
          • 您是否正在清除间隔?因为如果不是,那些
            setInterval
            函数将累加,每10毫秒左右将
            10
            添加到分数中

          • setInterval
            不是很精确,您的函数可能会延迟10毫秒以上。(不是像你的例子中那样把10毫秒变成5000毫秒,而是有一点。)这是一个更好的主意,不涉及计时器:

            var questionPosedTime = new Date();
            poseTheQuestion();
            onAnswerReceived(function() {
              var answerReceivedTime = new Date();
              var answeringDelayInMilliseconds = answerReceivedTime - questionPosedTime;
              adjustScore(answeringDelayInMilliseconds);
            });
            
              • 您是否正在清除间隔?因为如果不是,那些
                setInterval
                函数将累加,每10毫秒左右将
                10
                添加到分数中

              • setInterval
                不是很精确,您的函数可能会延迟10毫秒以上。(不是像你的例子中那样把10毫秒变成5000毫秒,而是有一点。)这是一个更好的主意,不涉及计时器:

                var questionPosedTime = new Date();
                poseTheQuestion();
                onAnswerReceived(function() {
                  var answerReceivedTime = new Date();
                  var answeringDelayInMilliseconds = answerReceivedTime - questionPosedTime;
                  adjustScore(answeringDelayInMilliseconds);
                });
                

              如果需要精度(通常一个日期对象就足够了,但如果有更好的对象可用…),则存在以下问题。提供了一些实用的例子。@RobG:谢谢。如果你关心兼容性,那就要小心了。如果需要精确性(通常一个日期对象就足够了,但如果有更好的可用性…),那就有了。提供了一些实用的例子。@RobG:谢谢。如果你关心兼容性,那就要小心了。如果需要精确性(通常一个日期对象就足够了,但如果有更好的可用性…),那就有了。提供了一些实用的例子。@RobG:谢谢。如果你关心兼容性,那就要小心了。如果需要精确性(通常一个日期对象就足够了,但如果有更好的可用性…),那就有了。提供了一些实用的例子。@RobG:谢谢。如果你关心兼容性,那就要小心了,这很重要。