AS3 удаление всех дочерних элементов из массива в классе из родительского класса

В классе Level 1 (Родитель) я генерирую граждан как отдельные объекты (c), чтобы ходить слева или справа по сцене. все они добавляются в массив, называемый гражданами:

if (citizens.length < 10)
        {
           //create citizen
            var c:Citizen = new Citizen(side,speed,yPos);
            addChildAt(c, 2);
            citizens.push(c);
        }

Я хочу удалить каждый экземпляр класса, а также удалить прослушиватель событий, прикрепленный к нему в классе:

this.addEventListener(Event.ENTER_FRAME,moveCitizen);

Использую ли я для каждого из них сращивание из массива? НАПРИМЕР

for each (c in citizens) {
removeEventListener(Event.ENTER_FRAME,moveCitizen);
splice();
}
3
nl ja de

2 ответы

Вы можете сделать что-то похожее на следующее:

// Creation
if (citizens.length < 10) {        
   //create citizen
    var c:Citizen = new Citizen( side, speed, yPos );
    addChildAt( c, 2 );
    citizens.push( c );
}

// Removal 
for( var i:int = 0; i < citizens.length; i++ ) {
    var c:Citizen = citizens[ i ].pop();
    removeChild( c )
    c.cleanUp();
}

// In Class Citizen
public function cleanUp():void {
    removeEventListener( Event.ENTER_FRAME, moveCitizen );
}
1
добавлено
вы присоединяете «moreCitizen» внутри класса Citizen или основного класса?
добавлено автор Chris, источник
Я не совсем уверен, что вы говорите, можете ли вы показать большую выборку кода?
добавлено автор Chris, источник
вы можете показать конструктор для Citizen?
добавлено автор Chris, источник
добавлено автор Chris, источник
Небольшое дополнение к этому, переменная c лучше всего создавать за пределами цикла for , а затем просто пуст после запуска c.cleanUp (); выполнив c = null;
добавлено автор Gerrit Bertier, источник
Я получаю эту ошибку еще, когда я удаляю child1 уровня из класса документа? Разумеется, это приведет к удалению всех связанных с прослушиванием событий. Когда я перехожу на уровень2, он повторяет эту ошибку 30 раз в секунду. TypeError: Ошибка # 1009: не удается получить доступ к свойству или методу ссылки на нулевой объект. в Citizen/moveCitizen ()
добавлено автор user1878381, источник
moveCitizen получает вызов в классе Citizen
добавлено автор user1878381, источник

@ user1878381 вам нужно сделать один метод в классе citizen , если вам нужно вызвать в каждом объекте сказать reset() . когда вы удаляете объект, вы должны вызвать функцию сброса этого объекта, которая сбросит citizes , удалив все eventlistner и сбросив все свойства граждан в этом объекте.

вы можете использовать метод array.pop() для всплывания последнего перенесенного объекта из массива для каждого цикла. если вы используете массив, массив имеет множество функций, таких как shift , pop , splice (i, 1). и т.д...

i think for each is the best one among all..

0
добавлено
Да, я знаю. но это проблема, которую я имею. Я не знаю, как это назвать, хотя из родителя level1, когда я удаляю класс level1
добавлено автор user1878381, источник
Software Design and OOP
Software Design and OOP
1 481 участник(ов)

OOP, software design, architecture, GRASP, GoF, SOLID, separation of concerns, безысходность. Пожалуйста, придерживайтесь указанных тем. https://oopru.github.io More cool stuff: @fp_ru @tdd_ru @coding_interview_ru @coding_ru