JavaScript - очень запутан при удалении элементов из контейнера
Я делаю 2D, сверху вниз, Zelda стиль веб-ролевых игр для одного игрока на JavaScript.
Когда игрок (фиолетовая рубашка) ходит рядом с кошкой, он "спасение» это ... который в основном удаляетanimalContainer
отContainerOfAnimals
(тем самым удаляя animalContainer 'с BMP со сцены), а затем добавьте id этого animalContainer вrescuedTotal_Array
...
Странно то, что на картинке ниже яя могу спастиanimalContainer2
а такжезатем спасениеanimalContainer1
... но если я пойду изanimalContainer1
вanimalContainer2
Кидает
Uncaught TypeError: Cannot read property 'id' of undefined` error.
...В принципе:
Рабочий способ: получить ID 22, затем до ID 21 - >>> При этом я замечаю, что имя элемента неизменить идентификатор ... не знаю, почему ... так что сломанный путь ... он может быть не в состоянии даже связать имя элементаanimalContainer2
с удостоверением личности? Но я неЯ не знаю, как идентифицировать имя и имя таким образом.
ID in rescued array...: 22, element name: animalContainer1, rescued array length: 2, elem index pos: 0, index: 0
ID in rescued array...: 21, element name: animalContainer1, rescued array length: 2, elem index pos: 1, index: 0
Сломанный путь - выдает ошибку: получите ID 21, затем до ID 22
ID in rescued array...: 21, element name: animalContainer1, rescued array length: 1, elem index pos: 0, index: 0
1. Uncaught TypeError: Cannot read property 'id' of undefined
Фрагмент кода:
function grabIt(NPC_id, index) {
//check if NPCid already exists in array before adding...
if ($.inArray(ContainerOfAnimals.children[index].id, rescuedTotal_Array) == -1) {
rescuedTotal_Array.push(ContainerOfAnimals.children[index].id);
}
if (rescuedTotal_Array.length == 2) {
for (var z = 0; z < rescuedTotal_Array.length; z++) {
console.log("ID in rescued array...: " + rescuedTotal_Array[z] + ", \n element name: " + ContainerOfAnimals.children[index].name + ", rescued array length: " + rescuedTotal_Array.length + ",\n elem index pos: " + z + ",\n index: " + index);
}
}
//when I remove the first added element to rescuedTotalArray... the 2nd element's index assumes first added element's index... (goes from 1 to 0)
console.log(index);
console.log("element removed: " + ContainerOfAnimals.children[index]);
stage.update();
ContainerOfAnimals.removeChild(ContainerOfAnimals.children[index]);
updateHUD();
}
Я понятия не имею, почему порядок, в котором я храню элементы в массиве / удаляю их со сцены, будет иметь значение ...
РЕДАКТИРОВАТЬ: я чувствую, что могу решить эту проблему, удалив элемент из ContainerOfAnimals по идентификатору элемента, а не по индексу ... объект контейнера не предлагаетgetChildID()
функция ...
поэтому я попробовал:
var childToRemove = document.getElementById(ContainerOfAnimals.children[index]);
console.log(childToRemove);
ContainerOfAnimals.removeChild(childToRemove);
console.log (childToRemove) дает мнеnull
для детей
Но делать это:console.log(ContainerOfAnimals.children[index].id);
дает мне идентификатор21
, который является правильным идентификатором ...