2014-09-29 2 views
0

Я добавляю некоторые чистые сцены, чтобы устранить утечки памяти, и я немного запутался в правильном способе удаления помощника стрелки. (С использованием Three.js оборотов 68)Каков правильный способ удалить THREE.ArrowHelper() из сцены?

Предполагая, что я делаю это, чтобы создать его:

var thisArrow = new THREE.ArrowHelper(dir, origin, length, hex, headLength, headWidth)); 
scene.add(thisArrow); 

При попытке удалить его, как это:

scene.remove(thisArrow); 

Это работает отлично. Но я предполагаю, что у меня возникает утечка памяти, потому что я не выбрал геометрию. (Я создаю много стрел в течение долгого времени, так что это имеет значение)

Но когда пытаешься избавиться от геометрии (зная, что стрелка действительно линия и конус), как это:

thisArrow.line.geometry.dispose(); 
thisArrow.cone.geometry.dispose(): 

Я получаю ошибки webGL:

[Warning] WebGL: INVALID_OPERATION: drawElements: no ELEMENT_ARRAY_BUFFER bound ([native code], line 0) 

Должен ли я также избавиться от самой стрелки? Каков правильный способ сделать это.

Спасибо!

Джефф

+0

Как альтернативный подход или обход, рассмотрите возможность создания пула стрелок и повторного использования их. – WestLangley

ответ

0

При попытке удалить его, как это:

scene.remove(thisArrow); 

Это работает отлично. Но я предполагаю, что у меня возникает утечка памяти, потому что я не выбрал геометрию. (Я делаю много стрел с течением времени, так что это важно)

Выполнение scene.remove(thisArrow) должно быть всем, что вам нужно. ArrowHelper делится той же геометрией со всеми остальными.