2013-11-21 66 views
1

我使用processing.js 1.4.1,並有這樣的代碼:如何在processing.js中覆蓋print和println?

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

我如何可以覆蓋打印功能(無需對矯正庫的代碼),因此它在$('pre')顯示輸出?

我可以覆蓋Processing.logger(它由行4404中的println使用),但是直到我運行println並且沒有Processing.println函數時,print纔會工作。

回答

1

我發現我可以編譯和運行自己的處理代碼,處理對象的實例具有打印和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) { 
2

這裏有一個解釋如何在這裏:http://processingjs.org/articles/PomaxGuide.html#interface。 它需要你將javascript綁定到Processing草圖才能調用它的函數。

這小提琴或許可以解釋不是描述它會更好: http://jsfiddle.net/98AsE/

我的解決方案所需的JavaScript方法是「JavaScript的」對象(this在全局命名空間),以工作的性質,否則處理止跌」噸看到它:

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

之後,覆蓋printprintln應該很容易。

+0

小,但一塌糊塗,可以在沒有代碼的情況下處理,只在JavaScript? – jcubic