Ошибка означает, что при запуске этой строки:
stage.removeChild(bullets_arr[i]);
Предмет, на который ссылается bullets_arr[i]
, фактически не находится на сцене. Скорее всего, потому что он уже был снят со сцены.
Хотя это может и не быть точной причиной вашей ошибки, здесь есть одна большая проблема - удаление элементов из массива, который вы сейчас просматриваете.
Когда вы делаете: bullets_arr.removeAt(i);
, вы изменяете размер массива bullets_arr
.
На первой итерации i
равно 0
. Ваша первая пуля - bullets_arr[0]
, вторая - bullets_arr[1]
ваша третья - bullets_arr[2]
и т. Д. Если в первом цикле вы удалите элемент из массива, это означает, что индексы сместились, поэтому теперь ваш второй bullet имеет значение bullets_arr[0]
, но в следующем цикле значение i
увеличивается до 1
, так что теперь вы фактически пропустили второй маркер и проверяете третий элемент, который после удаления первого маркера теперь находится по индексу 1
.
В вашей функции moveBullet
измените цикл так, чтобы он повторялся в обратном направлении. Таким образом, если вы удаляете элемент, он не сдвигает индексы, по которым вам еще предстоит повторяться.
for (var i: int = bullets_arr.length - 1; i >= 0; i--) {