Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 11.11.2009, 18:11
cauchy вне форума Посмотреть профиль Отправить личное сообщение для cauchy Найти все сообщения от cauchy
  № 1  
Ответить с цитированием
cauchy
 
Аватар для cauchy

Регистрация: Jan 2009
Адрес: Северный островок дефолт-сити
Сообщений: 144
По умолчанию visible=0/1 vs add/removeChild

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

Старый 11.11.2009, 19:50
relevance4 вне форума Посмотреть профиль Отправить личное сообщение для relevance4 Посетить домашнюю страницу relevance4 Найти все сообщения от relevance4
  № 2  
Ответить с цитированием
relevance4

Регистрация: Nov 2006
Адрес: там
Сообщений: 468
Отправить сообщение для relevance4 с помощью ICQ
это два абсолютно разных метода, они не являются альтернативами друг-другу.

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

Старый 11.11.2009, 22:42
mayakwd вне форума Посмотреть профиль Отправить личное сообщение для mayakwd Посетить домашнюю страницу mayakwd Найти все сообщения от mayakwd
  № 3  
Ответить с цитированием
mayakwd
 
Аватар для mayakwd

Регистрация: Jul 2008
Адрес: t:2, x: 0.76
Сообщений: 553
Отправить сообщение для mayakwd с помощью ICQ Отправить сообщение для mayakwd с помощью Skype™
проверка о которой написано выше
Код AS3:
if (formToDelete != null && formContainer.contains(formToDelete))
  formContainer.removeChild(formToDelete);
__________________
Блог, Twitter
Брюзга.

Старый 12.11.2009, 02:53
AL.exe вне форума Посмотреть профиль Отправить личное сообщение для AL.exe Посетить домашнюю страницу AL.exe Найти все сообщения от AL.exe
  № 4  
Ответить с цитированием
AL.exe
 
Аватар для AL.exe

Регистрация: Jan 2004
Адрес: Net
Сообщений: 1,049
Отправить сообщение для AL.exe с помощью ICQ
Цитата:
Сообщение от mayakwd Посмотреть сообщение
проверка о которой написано выше
Код AS3:
if (formToDelete != null && formContainer.contains(formToDelete))
  formContainer.removeChild(formToDelete);
Проще try...catch
__________________
Дело не в тебе

Старый 12.11.2009, 01:01
bicubic_bublic вне форума Посмотреть профиль Найти все сообщения от bicubic_bublic
  № 5  
Ответить с цитированием
bicubic_bublic
Banned

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

Старый 12.11.2009, 10:54
cauchy вне форума Посмотреть профиль Отправить личное сообщение для cauchy Найти все сообщения от cauchy
  № 6  
Ответить с цитированием
cauchy
 
Аватар для cauchy

Регистрация: Jan 2009
Адрес: Северный островок дефолт-сити
Сообщений: 144
Цитата:
Сообщение от bicubic_bublic Посмотреть сообщение
если имеется МувиКлип с анимацией или что-то перерисовываемое динамически, то visible = false не отменяет прорисовку каждого его кадра, однако если убрать из дерева отображения, то прорисовка просчитываться для этого объекта не будет.
Точно, как то не подумал об этом. Но впринципе в данном конкретном случае это не важно.
За всевозможные варианты всем спасибо. Вчера тоже увидел в другом месте удаление через try и catch, до этого что-то и не догадывался о таком способе (не считая первоначального обучения, сам ещё ни разу не использовал try/catch )
Но в этом проекте наверное пока оставлю через visible, там ещё других проблем ой-ой-ой

Старый 12.11.2009, 13:14
switcher! вне форума Посмотреть профиль Отправить личное сообщение для switcher! Найти все сообщения от switcher!
  № 7  
Ответить с цитированием
switcher!

Регистрация: May 2009
Сообщений: 220
Цитата:
Сообщение от bicubic_bublic Посмотреть сообщение
если имеется МувиКлип с анимацией или что-то перерисовываемое динамически, то visible = false не отменяет прорисовку каждого его кадра, однако если убрать из дерева отображения, то прорисовка просчитываться для этого объекта не будет.
на чем основана эта информация? есть ссылки на теорию или еще какие-то доказательства?
Тоже интересовал этот вопрос. Нашел комп послабже моего и сделал тест, в котором:
- динамически дабавил в дисплей лист 5000 спрайтов с приличными размерами.
- далее через Timer сделал fps равное примерно 1000 в секунду (по номиналу).
- на каждом "кадре" все спрайты меняли координаты.

Сперва для всех спрайтов visible поставил в false и потестил. Результат для 200-т "кадров" - 1300 милисекунд. Затем поставил visible = true... В общем для 1-го "кадра" результат - 8100 примерно.
Крайне сомнительно, что с visible = false отрисовка происходит.

Однако, тот же тест, но без добавления спрайтов в дисплей лист действительно показал незначительный, но стабильно более быстрый результат. Соответственно, я педположил, что "разница" вызвана самим фактом нахождения в дисплэй-листе нежели значением visible.

Тем не менее я основываюсь на результатах теста, а не на теории. И возможно где-то ошибаюсь в рассуждениях. Если так, то где

UPD:
Цитата:
Сообщение от bicubic_bublic Посмотреть сообщение
"show redraw regions" говорит об обратном
а у меня "show redraw regions" не показывает отрисовку спрайтов.


Последний раз редактировалось switcher!; 12.11.2009 в 13:31.
Старый 12.11.2009, 01:53
Artic вне форума Посмотреть профиль Найти все сообщения от Artic
  № 8  
Ответить с цитированием
Artic
Banned

Регистрация: Jun 2009
Сообщений: 298
я делаю так

Код AS3:
if (getChildByName("super")) removeChild(super)
super = new Sprite();
super.name = "super";
addChild(super);

Старый 12.11.2009, 01:55
bicubic_bublic вне форума Посмотреть профиль Найти все сообщения от bicubic_bublic
  № 9  
Ответить с цитированием
bicubic_bublic
Banned

Регистрация: Sep 2009
Сообщений: 231
Цитата:
Сообщение от Artic Посмотреть сообщение
я делаю так
лихо вы ключевое слово используете

Старый 12.11.2009, 02:28
SamFR вне форума Посмотреть профиль Отправить личное сообщение для SamFR Посетить домашнюю страницу SamFR Найти все сообщения от SamFR
  № 10  
Ответить с цитированием
SamFR

Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
Arctic, не лучший метод. Не говоря уже о super =)

Создать новую тему Ответ Часовой пояс GMT +4, время: 13:26.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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