Метод removeChild() AS3. Удаление объектов со сцены

На этом уроке мы рассмотрим два вопроса:

  1. Метод removeChild() AS3. Удаление объектов со сцены
  2. Дополнительная информация

Для удаления объектов со сцены с помощью кода существует метод removeChild() AS3. По аналогии с методом addChild() он принимает один параметр: имя объекта, который должен быть удален. После вызова этого метода экземпляр удаляется из списка отображения (display list).

Однако метод removeChild() не удаляет объект из памяти, поэтому Вы можете его визуализировать, вызвав addChild() еще раз. Если же Вы решили, что объект совсем больше не понадобится, то его нужно удалить как из списка показа, так и памяти. Для этого установите его значение равным null.

Кроме того, Вы должны завести привычку сразу удалять слушатель события (event listener), который был прикреплен к удаляемому объекту. Даже если сам объект был изъят из памяти, то его слушатель события, оставшись, продолжает потреблять ресурсы и делает безуспешные попытки, отвечая на события.

Вот пример кода, полностью удаляющего объект и прикрепленный к нему слушатель события:

removeChild(myRec);
myRec.removeEventListener(MouseEvent.CLICK, handleClick);
myRec = null;

Если Вы забудете удалить ненужные объекты из памяти и списка показа (dispaly list), то существует большая вероятность, что возникнут утечки в памяти и другие потенциальные ошибки.

Метод removeChild() AS3. Удаление объектов со сцены

Экспортируйте символ в ActionScript.

В панели Actions добавьте экземпляр этого символа на сцену с помощью метода addChild() (см. урок «Метод addChild(). Добавление экземпляра на сцену с помощью ActionScript»).

Наберите

removeChild();

Внутри круглых скобок наберите имя экземпляра, который нужно удалить.

Удалите экземпляр из памяти:

  • введите имя экземпляра;
  • поставьте знак равно;
  • наберите null и поставьте точку с запятой.

Нажмите Ctrl + Enter.

Ролик начнет воспроизводиться. Удаленный экземпляр больше не появится на сцене.

Дополнительная информация

Если Вы хотите удалить объект не зная его имени, но зная уровень на котором он находится, то Вы можете использовать метод removeChildAt() вместо removeChild() AS3.

Этот метод принимает единственный аргумент: целое число (intenger) – уровень с которого должен быть удален объект. Важно помнить, что метод removeChildAt() удаляет объект полностью, не оставляя его в памяти, т.е устанавливает его значение равным null.

После вызова метода removeChildAt() все объекты, находившиеся над удаленным объектом смещаются на один уровень вниз.

Уровни концептуально близки к слоям, но все таки у них есть отличия:

  • слои используются для определения порядка расположения объектов на сцене, которые нарисованы во Flash
  • уровни же используются только в Actionscript и определяют порядок объектов созданных с помощью кода.

У Вас нет возможности управлять слоями через код, так же как и уровнями каким либо иным способом помимо кода. Объекты добавленные с помощью методов addChild() и addChildAt() появятся на сцене только во время воспроизведения ролика Flash Player'ом.