了解程序中的执行流程

时间:2019-05-07 19:21:13

标签: javascript p5.js

我正在创建一个秒表,它会在听到拍手声后停下来。我的带有秒表对象的第一个函数应调用第二个函数draw,并应留在该函数中,并持续监听直到vol > 0.3。然后,它应该返回并停止我的秒表。但是,虽然音量似乎已注册,但我的函数从不返回并停止秒表。我不了解执行流程的哪一部分?一旦音量达到绘图功能的阈值,如何使我的第一个功能停止秒表?


function callStopwatch() {
    var watch = new Stopwatch(timer);
    watch.start();
    if(draw()){
        watch.stop();
    }
}

function draw() {
    let flag = false;
    var vol = mic.getLevel();
    if(vol > 0.2){
        console.log("true"); //created to check whether sound detection is working
        flag = true;
    }
    return flag;
}

1 个答案:

答案 0 :(得分:2)

我发现您的代码存在三个问题:

  1. 您不应从其他函数调用draw()。 P5.js每秒自动为您调用draw()函数60次。你不应该自己称呼它。
  2. 您不应从draw()函数返回任何内容。因为draw()是自动调用的,而不是您自动调用的,所以返回值将被忽略。
  3. 无论如何,您永远不会调用callStopwatch()函数。

我认为您可能想重构代码。使用P5.js流程可以发挥自己的优势。具体来说,P5.js在草图的开头调用setup()函数,并且每秒调用draw() 60次。使用该结构来构建您的逻辑。

这是我处理方法的框架:

var stopwatch;

function setup(){
  stopwatch = new Stopwatch(); 
  stopwatch.start();
}

function draw(){
  var vol = mic.getLevel();
  if(vol > 0.2){
    stopwatch.stop();
  }
}


相关问题