如何将动态参数传递给.pde文件

时间:2010-12-21 04:49:45

标签: javascript processing.js

类Shape包含两个方法drawCircle()和drawTriangle()。每 函数采用不同的参数集。目前,我援引这一点 通过直接调用pde文件。如何从一个传递这些参数 如果我必须控制传递给的参数,则直接使用HTML文件 绘制功能? 1)Example.html有(当前版本)

<script src="processing-1.0.0.min.js"></script> 
<canvas data-processing-sources="example.pde"></canvas>

2)Example.pde有

    class Shape { 
         void drawCircle(intx, int y, int radius) { 
              ellipse(x, y, radius, radius); 
        } 
         void drawTriangle(int x1, int y1, int x2, int y2, int x3, int 
y3) { 
              rect(x1, y1, x2, y2, x3, y3); 
        } 
    } 
    Shape shape = new Shape(); 
   shape.drawCircle(10, 40, 70); 

我希望在我的HTML文件中执行类似的操作,以便我可以 将所有函数移动到一个单独的文件中并使用它来调用它们 绘制不同形状的不同参数(非常类似于你 会用Java做的) A.html

<script> 
Shape shape = new Shape(); 
shape.drawCircle(10, 10, 3); 
</script> 

B.html

<script> 
Shape shape = new Shape(); 
shape.drawTriangle(30, 75, 58, 20, 86, 75); 
</script>

2)Iam使用Example2.pde

void setup()  {  
  size(200,200);  
  background(125);  
  fill(255); 
}

  void rectangle(int x1, int y1, int x2, int y2) {
          rect(x1, y1, x2, y2);
}

我的Example2.html有

    var processingInstance;     processingInstance.rectangle(30,20,55,55);

但这不起作用。如何从html动态传递这些参数。

3 个答案:

答案 0 :(得分:2)

您可以使用canvas元素的data属性将数据传递到处理实例。

例如,如果您希望myvar.value以实例结束:

<canvas data-processing-myvar="value" data-processing-sources="/assets/mysketch.pde"></canvas>

您可以通过调用以下方式访问草图中的数据:

var myVarInSketch = this.param('myvar');

答案 1 :(得分:1)

如果您只需要在加载时传入这些变量,那么在JS中创建配置对象似乎更容易,然后您可以在处理代码中访问它们。请参阅Accessing Javascript Objects from Processing

例如,您的JS可能如下所示:

var shapes = [
    {shape:"circle", x:10, y:150, radius: 70}
];

在您的处理代码中,您可以访问shapes变量:

void draw() {
    shape = new Shape();
    fill(0);
    for (int i=0; i<shapes.length; i++) {
        if (shapes[i].shape=="circle") {
            shape.drawCircle(shapes[i].x, shapes[i].y, shapes[i].radius);
        }
        // etc  
    }
}

我的印象是,这比尝试从javascript实际控制处理实例要容易得多。

答案 2 :(得分:0)

为了达到你想要的效果,你可能想尝试:

// Assuming: <canvas id="internal" data-processing-sources="internal.pde">
instance = Processing.getInstanceById('internal');
instance.internalFunction(); // Call to internalFunction() inside internal.pde