2013-08-29 3 views
1

У меня есть сайт работает 2 эскизы обработки, я хочу, чтобы позвонить Processing.instances [0] .exit(), как предложено в этом вопросе: Dynamically "unload" a Processing JS sketch from canvasProcessing.instances возвращает нуль

Но когда я называю Processing.instances IT возвращает null, и я не получаю ошибок на консоли javascript - также Processing.instances.length возвращает (0).

Здесь Javascript код:

document.onkeydown = function(e) { // or document.onkeypress 
e = e || window.event; 
if (e.keyCode == 115 || e.keyCode == 83) { //press "s" or "S" 
    alert(Processing.instances.length); 
} 
}; 

А вот URL для сайта: http://culturadigital.cc/nuevaweb

Благодаря

+0

Также здесь: 'var canvas = getElementsByClassName (документ, 'processingsketch'); \t, если (холсты) { \t \t для (J = 0; J fartagaintuxedo

ответ

1

Как вы выяснили из форума PJs, Processing.instances в неопределенной судьбы , Как об этом:

document.onkeydown = function(e) { // or document.onkeypress 
    e = e || window.event; 
    if (e.keyCode == 115 || e.keyCode == 83) { //press "s" or "S" 
    var canvases = document.getElementsByClassName("processingsketch"); 
      window.alert(canvases.length); 
    if (canvases) { 
     var ps = Array(); 
     for (j=0;j<canvases.length;j++) { 
     ps[j]=Processing.getInstanceById(canvases[j].getAttribute('id')); 
     } 
     for (j=0;j<canvases.length;j++) { 
     window.alert("ps " + ps[j]); 
     window.alert(canvases[j].getAttribute('id')); 
     if(ps[j]){ps[j].exit();} //per fartagaintuxedo's comment below: to avoid second error because once it exits then there is no longer an instance in that canvas 
     canvases[j].width = canvases[j].width; //to obliterate the canvas instead of just freezing it 
     } 
    } 
    } 
}; 

Для справки, могут быть более эффективные способы, чтобы очистить холст здесь: How to clear the canvas for redrawing

+0

, очевидно, «выход» должен сделать эскиз невидимым .. что происходит здесь, так это то, что он зависает .. странно .. то во второй раз я нажимаю «с», я снова получаю ту же ошибку – fartagaintuxedo

+0

, но я догадываюсь, что это просто то, что он должен делать .. просто замораживать, почему бы и нет. – fartagaintuxedo

+0

просто примечание, чтобы избежать второй ошибки *, потому что, как только он выйдет, в этом холсте уже нет экземпляра * просто добавьте 'if (ps [j]) {ps [j] .exit();}' – fartagaintuxedo

1

Если кто-то считает этот вопрос: не использовать Processing.instances - мы никогда не писал его быть доступным. Существует функция Processing.getInstanceById(), которую вы передаете в свой идентификатор canvas и возвращаете эскиз, который выполняется на нем.

Получите ваш экземпляр с .getInstanceById(), затем позвоните по телефону .exit().

Смежные вопросы