刷新 p5 的实例化

Refresh an instantiation of p5

我的文档中有多个草图实例。我如何通过屏幕刷新实际重新运行特定实例化?

假设我有:

function buildSketch(){

  var sketch1 = function(sketch){
    sketch.setup = function(){
      //Do my thing
    }
  }

  new p5(sketch1); 

}


function buildSecondSketch(){

  var sketch2 = function(sketch){
    sketch.setup = function(){
      //Do my thing
    }
  }

  new p5(sketch2); 

}

我知道,如果我将 sketch 附加到 window 对象,我可以刷新,但这似乎...很老套,例如:

 function buildSecondSketch(){

 window.sketch = sketch // Adding this seems to help

  var sketch2 = function(sketch){
    sketch.setup = function(){
      //Do my thing
    }
  }

  new p5(sketch2); 

}

然后我会:

sketch.setup()

哪个有效。但我不知道为什么会这样。

您应该自己调用setup()函数。

最简单的做法可能是为每个草图添加一个 refresh() 函数。此函数将通过将任何草图级变量设置回其原始值来简单地重置草图的状态。然后调用那个函数。这基本上就是您自己调用 setup() 所做的,但避免了短路 P5.js 的内部自动函数调用。

无论哪种方式,您都必须保留对草图变量的引用。您可以使用 window.sketch 来做到这一点,这只是创建一个全局变量,或者您可以在 buildSketch() 函数之外声明它们。

您也可以删除旧的 p5 实例并重新实例化它们,但这需要保留对每个 p5 实例的引用。