跳跃运动控制器setTimeout Javascript得分不准确?

时间:2014-04-13 11:56:05

标签: javascript jquery

我尝试了很多方法尝试这样做但没有成功!在现有代码的情况下,当用户将5个手指悬停在跳跃运动控制器上时,5秒后,计数器将开始连续计数,直到达到169或者其他东西,我希望它只能加1。我试图让用户将鼠标悬停在跳跃动作上10次,因此每次用户进行练习时,它会将1加1得分,然后是2/10,依此类推。但是当用户做到这一点我得到169/10!有没有人对此有任何建议或者能指出我正确的方向?!它是一个大学项目,我觉得我的深度在这里!我已经包含了所有代码:

//Set up the controller
var controller = new Leap.Controller();
var isCounting = false;
controller.on( 'frame' , function(frame){
  c.clearRect(0, 0, width, height);
  var numberOfFingers = frame.fingers.length;
  c.font = "200px Arial";
  c.fillStyle = '#3e8a41';
  c.textAlign = 'center';
  c.textBaseline = 'middle';
  c.fillText( numberOfFingers , width/2 , height/2 );

  if(numberOfFingers == 5 && !isCounting) {
    isCounting = true;
    setTimeout(function(){
      isCountring = false;
      if(numberOfFingers == 5){ //5 fingers still after 5s
        var start = parseInt(document.getElementById('count').innerHTML);
        var end = start+1;
        document.getElementById('count').innerHTML = end;
        }
      }, 5*1000); //your 5s
    }
});


controller.connect();

1 个答案:

答案 0 :(得分:0)

我认为问题是frame已经很快运行,所以你创建了很多setTimeouts,每个都为你的值加1。我建议你设置一个标志来跟踪你正在做的事情:

var isCounting = false;
controller.on( 'frame' , function(frame){
    c.clearRect(0, 0, width, height);
    var numberOfFingers = frame.fingers.length;

    if(numberOfFingers == 5 && !isCounting) {
        isCounting = true;
        setTimeout(function(){
            isCountring = false;
            if(numberOfFingers == 5){ //5 fingers still after 5s
                var start = parseInt(document.getElementById('count').innerHTML);
                var end = start+1;
                document.getElementById('count').innerHTML = end;
            }
        }, 5*1000); //your 5s 
     }
});

我没有飞跃所以我不能确定100%,但值得尝试。