将额外参数传递给新的 p5 实例

Mod*_*rmo 4 javascript p5.js

在实例模式下调用新的 p5 实例时,我需要传递一个附加参数。

我希望能够做到这一点:

var x = 50;

var sketch = function(p5){

  p5.setup = function(x){
    // Canvas setup etc
    rect(x,40,40,40)
  }
}

new p5(sketch, x)
Run Code Online (Sandbox Code Playgroud)

现在,它显示为undefined,这让我相信new p5只能接受一个参数。是否有一种方法可以让我向实例传递额外的参数,而无需破解 p5?

Kev*_*man 8

是的,你不能p5像这样向对象添加随机参数。另请注意,p5构造函数和setup()函数是两个完全不同的东西。您调用构造函数,P5.js 库会setup()为您调用该函数。

我真的不确定你想做什么。为什么不直接删除参数x(未定义)并引用顶级x变量(50)呢?

你也许可以做一些稍微愚蠢的事情,如下所示:

function defineSketch(x){

  return function(sketch){
    sketch.setup = function(){
      // Canvas setup etc
      rect(x,40,40,40)
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

var mySketch = defineSketch(100);
new p5(mySketch);
Run Code Online (Sandbox Code Playgroud)

不过这太恶心了。

编辑:您还可以这样做:

var s = function( sketch ) {

  sketch.setup = function() {
    sketch.createCanvas(200, 200);
  };

  sketch.draw = function() {
    sketch.background(0);
    sketch.rect(sketch.x, sketch.y, 50, 50);
  };
};

var myp5 = new p5(s);
myp5.x = 75;
myp5.y = 25;
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为这是您创建sketch的实例。p5因此,您可以向实例添加属性p5,并将其传递到草图函数中。