如何在processing.js中覆盖print和println?

时间:2013-11-21 18:18:04

标签: javascript processing.js

我使用的是processing.js 1.4.1并且代码如下:

new Processing($('canvas')[0], $('texarea').val());

如何覆盖打印功能(不修改库代码),以便在$('pre')中显示输出?

我可以覆盖Processing.logger(4404行中的println使用)但是打印不起作用,直到我运行println并且没有Processing.println函数。

2 个答案:

答案 0 :(得分:2)

这里有一个解释如何在这里做:http://processingjs.org/articles/PomaxGuide.html#interface。 它要求您将javascript绑定到Processing sketch以调用其函数。

这个小提琴可能解释得比描述更好: http://jsfiddle.net/98AsE/

我的解决方案要求javascript方法是'javascript'对象(全局命名空间中为this)的属性才能工作,否则Processing不会看到它:

this.displayMsg = function(msg){
    document.querySelector('#output').innerHTML += msg;
}

之后,覆盖printprintln应该很容易。

答案 1 :(得分:1)

我发现我可以自己编译和运行处理代码,处理对象的实例有print和println方法(以及所有处理函数):

var sketch = Processing.compile(texarea.val());
var processing = new Processing(canvas[0]);

processing.print = function(str) { output.append('<span>' + str + '</span>'); };
processing.println = function(str) { processing.print(str + '\n'); };

sketch.attach(processing, Processing.prototype); // defaultScope is set to the Processing.prototype
sketch.onLoad(processing);
if (processing.setup) {
    processing.setup();
    processing.resetMatrix();
    sketch.onSetup();
}
if (processing.draw) {
    processing.redraw();
}

代码不处理基于第8514行的循环

var executeSketch = function(processing) {