Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   visible=0/1 vs add/removeChild (http://www.flasher.ru/forum/showthread.php?t=132425)

cauchy 11.11.2009 18:11

visible=0/1 vs add/removeChild
 
Сейчас занимаюсь переделкой одного проекта и возник такой вопрос:
надо отображать в одном спрайте различные формы. Какие плюсы и минусы у каждого из озвученных выше подходов (присваивать visible неактивной формы нулю или удалять её из списка отображаемых объектов)?
Насколько я понимаю минус visible=0 в том что всё равно память хавается. Хотя поидее и при removeChild она тоже будет хаваться, если только не удалить все все ссылки на неактивную форму (а все все ссылки в моём случае не получиться наверное удалить).
Минус removeChild лично для меня в том, что при попытке удалить ненужную форму, если она уже была удалена ранее, вылетает ошибка, в то время как visible = 0 никаких ошибок не вызывает само собой. Хотя надо стремиться к тому, чтобы таких ошибок небыло впринципе, сейчас мне легче работать с visible.
Есть ли ещё какие-то другие различия между этими подходами?

relevance4 11.11.2009 19:50

это два абсолютно разных метода, они не являются альтернативами друг-другу.

перед использованием removeChild можно делать проверку, чтобы не возникала ошибка.

mayakwd 11.11.2009 22:42

проверка о которой написано выше
Код AS3:

if (formToDelete != null && formContainer.contains(formToDelete))
  formContainer.removeChild(formToDelete);


bicubic_bublic 12.11.2009 01:01

если имеется МувиКлип с анимацией или что-то перерисовываемое динамически, то visible = false не отменяет прорисовку каждого его кадра, однако если убрать из дерева отображения, то прорисовка просчитываться для этого объекта не будет.

Artic 12.11.2009 01:53

я делаю так

Код AS3:

if (getChildByName("super")) removeChild(super)
super = new Sprite();
super.name = "super";
addChild(super);


bicubic_bublic 12.11.2009 01:55

Цитата:

Сообщение от Artic (Сообщение 864949)
я делаю так

лихо вы ключевое слово используете

SamFR 12.11.2009 02:28

Arctic, не лучший метод. Не говоря уже о super =)

Artic 12.11.2009 02:37

^^ super не всмысле super() а в смысле я тут в пример просто написал ^^

почему не лучший способ ? собственно всегд волновал вопрос нормального удаления контейнера перед его пересозданием и выходом нашел, name, собственно работает без ошибок, недостатков кроме задания каждому контейнеру name, нету или я ошибаюсь ?

AL.exe 12.11.2009 02:53

Цитата:

Сообщение от mayakwd (Сообщение 864911)
проверка о которой написано выше
Код AS3:

if (formToDelete != null && formContainer.contains(formToDelete))
  formContainer.removeChild(formToDelete);


Проще try...catch

bicubic_bublic 12.11.2009 02:55

Код AS3:

if (formToDelete.parent) {
  formToDelete.parent.removeChild(formToDelete);
}



Часовой пояс GMT +4, время: 05:30.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.