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

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

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

Регистрация: Jul 2011
Сообщений: 169
По умолчанию Нужно ли и как удалять созданные фильтры?

Создаю фильтр вот так:
Код AS3:
_sprite.filters = [new GlowFilter(16711680,50,20,20,3,3)];
Пока что,когда я хочу убрать фильтр я делаю так:
Код AS3:
sprite.filters = [];
Правильно ли это?Или все же фильтр - обьект и подлежит удалению как-то по другому?

Старый 18.01.2012, 11:25
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Если создаете именно таким способом, не создавая переменную класса для хранения ссылки на фильтр, то это нормальное удаление – ссылка, хранящаяся в массиве filters, будет удалена и экземпляр фильтра будет удален GC в надлежащее время. Если же сохранять фильтр в переменную, то достаточно необходимо и ее тоже обнулить, когда фильтр больше не нужен.
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 18.01.2012 в 13:32. Причина: уточнил мысль
Старый 18.01.2012, 11:45
BuKT вне форума Посмотреть профиль Отправить личное сообщение для BuKT Найти все сообщения от BuKT
  № 3  
Ответить с цитированием
BuKT
 
Аватар для BuKT

блогер
Регистрация: Dec 2010
Сообщений: 237
Записей в блоге: 5
Вопрос в тему. Будет ли ошибка?
Код AS3:
_sprite.filters = [null, undefined, null]
Выполнится ли фильтр?
Код AS3:
_sprite.filters = [null, new BlurFilter(2,2,3), null]
И где можно почитать про воркфлоу фильтров?
__________________
Дебаггер не предлагать

Старый 18.01.2012, 11:57
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 4  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
Если же сохранять фильтр в переменную, то достаточно ее обнулить, когда фильтр больше не нужен.
Она ведь будет храниться в массиве фильтров. Оттуда тоже нужно будет снести

Старый 18.01.2012, 12:27
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 5  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Цитата:
Сообщение от goodguy Посмотреть сообщение
Она ведь будет храниться в массиве фильтров. Оттуда тоже нужно будет снести
А почему она будет там хранится? Я всегда думал, что:
Код AS3:
var a:Object = new Object();
var b:Object = {c:a};
trace(b.c); //Object
a = null;
trace(b.c); //null
__________________
Я мало чего умею, но зато хорошо умею учиться...


Последний раз редактировалось HardCoder; 18.01.2012 в 12:30.
Старый 18.01.2012, 12:35
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 6  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Ну, индекс элемента в массиве - это такая же ссылка. Приравнивание ссылки на объект к null в одном месте, не уничтожает сам объект. А раз уж ссылка на него есть еще и в массиве, то сборщик мусора его так же не уничтожит.
Код AS3:
var array:Array 	= [];
var sprite:Sprite = new Sprite();
array.push(sprite);
sprite	= null;
trace(array[0]); // [object Sprite]
И в твоем случае null там не будет. Только что проверил.
Все будет так:
Код AS3:
var a:Object = new Object();
var b:Object = {c:a};
a = null;
trace(b.c)// [object Object]

Старый 18.01.2012, 12:41
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 7  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Цитата:
Сообщение от goodguy Посмотреть сообщение
И в твоем случае null там не будет. Только что проверил.
Вот, я нехороший человек! Даже поленился проверить . Спасибо за наставление. Совсем забыл про аксиому "нужно удалять все ссылки".
__________________
Я мало чего умею, но зато хорошо умею учиться...

Старый 18.01.2012, 13:30
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 8  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Она ведь будет храниться в массиве фильтров. Оттуда тоже нужно будет снести
Криво выразился, сорри. Подразумевалось естественно, что в случае с переменной обнулить массив недостаточно, надо обнулить и саму переменную. Но согласен, прозвучало так как будто обнулять массив не надо(((( мои извинения.
__________________
Reality.getBounds(this);

Старый 18.01.2012, 14:52
windrunner31 вне форума Посмотреть профиль Отправить личное сообщение для windrunner31 Найти все сообщения от windrunner31
  № 9  
Ответить с цитированием
windrunner31

Регистрация: Jul 2011
Сообщений: 169
Спасибо всем!

Старый 18.01.2012, 16:42
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 10  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Сообщение от windrunner31 Посмотреть сообщение
Создаю фильтр вот так:
Код AS3:
_sprite.filters = [new GlowFilter(16711680,50,20,20,3,3)];
Пока что,когда я хочу убрать фильтр я делаю так:
Код AS3:
sprite.filters = [];
Правильно ли это?Или все же фильтр - обьект и подлежит удалению как-то по другому?
Можно просто
Код AS3:
sprite.filters = null;
Оно и проще и лишний массив не создается.

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

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

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


 


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


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