удаление детей из массива иногда работает

function addEffect()
{
var thisEffect = new MyEffect; //Simple movieClip
addChild(thisEffect);
effectArray[0] = thisEffect;
}

выше работает нормально. И позже я удаляю его... Ниже тоже отлично работает.

function removeEffect()
{
    if(effectArray[0] != null)
    {
     removeChild(effectArray[0]);
    }
}

Однако после того, как я снова использую функции, иногда на следующем ходу, иногда через два хода, я получаю: Ошибка № 2025: Предоставленный DisplayObject должен быть дочерним элементом вызывающего. Как ни странно, я использую ту же технику для добавления и удаления других мувиклипов, и она отлично работает для всего остального. Я не ссылаюсь на EffectArray или что-либо внутри него, за пределами этих двух функций, которые находятся внутри Main.as.


person randyHurd    schedule 01.12.2014    source источник
comment
Когда я сделал несколько операторов трассировки, я обнаружил, что, несмотря на то, что он удалил объект со сцены, объект остался внутри массива, а когда я попытался повторить это, он снова попытался удалить тот же самый клип, которого больше не было на странице. stage... effectArray = [] исправил это.   -  person randyHurd    schedule 01.12.2014


Ответы (1)


Это вполне нормально. Когда вы добавляете myEffect в массив, в массиве сохраняется только ссылка на myEffect. И когда вы пытаетесь добраться до этого объекта по массиву, все работает правильно, и ссылка на myEffect в массиве каждый раз правильно указывает на объект.

Но вот что каждый раз не получается, так это есть ли объект, на который указывает ориентир, или нет. Если он был удален, он больше не может быть дочерним элементом целевого объекта, поэтому вы получите эту ошибку.

В функции removeEffect вы проверяете наличие ссылки, а не объекта. И ссылка всегда есть, если вы не удалите ее из своего массива. После удаления объекта удалите и ссылку. И все будет работать корректно.

function removeEffect()
{
    if(effectArray[0] != null)
    {
     removeChild(effectArray[0]);
     effectArray[0] = null;
    }
}
person Umur Karagöz    schedule 01.12.2014