Я использую Two.JS для рендеринга фигур на сцену, которые были интерпретированы из SVG с использованием метода интерпретации Two.js.
У них добавлено свойство продолжительности жизни, и в цикле рендеринга Two я проверяю иллюстрацию и удаляю ее, если время истекло.
Это работает большую часть времени (> 99%), но иногда форма зависает, и я получаю эту ошибку:
Uncaught NotFoundError: Не удалось выполнить команду removeChild на узле: удаляемый узел не является дочерним по отношению к этому узлу.
showIllustration: (which) =>
alreadyIllustration = false
for shape, i in @_shapes
if shape.isIllustration is true
alreadyIllustration = true
if alreadyIllustration is false
switch which
when 'food'
if Math.random() > 0.49
id = 'currywurst'
else
id = 'pretzel'
when 'mascot'
if Math.random() > 0.49
id = 'ample'
else
id = 'bear'
when 'landmark'
if Math.random() > 0.49
id = 'tower'
else
id = 'tor'
illustration = @_two.interpret document.getElementById id
illustration.center().translation.set @_two.width / 2, @_two.height / 2
@_foreGround.add illustration
illustration.lifeSpan = 100
illustration.creationTime = new Date().getTime()
illustration.isIllustration = true
@_shapes.push illustration
и вот мой цикл для удаления иллюстраций:
removeShapes: () =>
time = new Date().getTime()
for shape, i in @_shapes by -1
if shape.lifeSpan
if time - shape.creationTime >= shape.lifeSpan
shape.remove()
@_shapes.splice i, 1
вот соответствующий код из two.js, где возникает ошибка.
removeChild: function(id) {
var elem = this.domElement.querySelector('#' + id);
if (elem) {
this.elem.removeChild(elem);
}
},
это происходит только с интерпретируемыми svg, а не с фигурами. как формы, так и интерпретируемые формы возвращают объекты two.polygon, поэтому это кажется странным.
Одна вещь, о которой я могу думать, это то, что two.js использует идентификатор элемента, который он интерпретирует как идентификатор созданного многоугольника, и если есть два элемента с одинаковым идентификатором, это вызывает ошибку при попытке удалить. Но проверка уже иллюстраций, кажется, работает правильно каждый раз, чтобы остановить добавление иллюстраций, если они существуют.
Я также попытался установить идентификатор на время его создания вместо идентификатора элемента, чтобы он каждый раз был уникальным, но это вызывает другие проблемы и ошибки.
Большое спасибо.