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

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

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

Регистрация: Nov 2005
Сообщений: 148
По умолчанию Вопрос по стиранию объектов.

Если я создаю объекты в цикле и помещая их в массив, могу ли я через этот массив занулить экземпляр, или просто сотру данные из массива?
Код AS3:
for (var i:Number=0; i<10; i++)
{
var button:MovieClip=new myButton();
this.Container.addChild(button);	
ButtonsArray.push(button);//Добавить объект в массив
}
 
for (var i:Number=0; i<10; i++)
{	
ButtonsArray[i]=null;//Видимо, удалится ссылка, а как удалить экземпляр?
}

Старый 03.09.2012, 04:14
spirit2 вне форума Посмотреть профиль Отправить личное сообщение для spirit2 Найти все сообщения от spirit2
  № 2  
Ответить с цитированием
spirit2

Регистрация: Dec 2009
Сообщений: 125
Код AS3:
for (var i:Number=0; i<10; i++)
{
Container.removeChild(button); //удаление с дисплей листа
ButtonsArray[i]=null; //удаление ссылки
}
//Когда придет GC, то сделает свое грязное дело, и удалит объект из памяти.

Старый 03.09.2012, 13:25
zerAlex2 вне форума Посмотреть профиль Отправить личное сообщение для zerAlex2 Найти все сообщения от zerAlex2
  № 3  
Ответить с цитированием
zerAlex2

Регистрация: Nov 2005
Сообщений: 148
И откуда мне взять это (button)? Я ж написал, что это в цикле создаётся и в массив заносится. Их там несколько десятков, к какому именно вы отсылаете? Как обратиться к непосредственно экземпляру?

Хотя я делаю несколько иначе remove. У меня каждый объект имеет функцию destroy():
Код AS3:
public function destroy():void
{
 //Destroy button
 //Тут убиваю все ссылки и пр. в данном объекте	
 var i:int = this.numChildren;
 while(i--)
 {
  this.removeChild(getChildAt(i));
 }
 var someObj:Object=this.parent.getChildByName(this.name);
 this.parent.removeChild(someObj);		
 
}

Старый 03.09.2012, 13:33
RigidFlasher вне форума Посмотреть профиль Отправить личное сообщение для RigidFlasher Найти все сообщения от RigidFlasher
  № 4  
Ответить с цитированием
RigidFlasher

Регистрация: Dec 2011
Сообщений: 70
Цитата:
И откуда мне взять это (button)?
Например, можно сделать так
Код AS3:
for (var i:Number=0; i<10; i++)
{
Container.removeChild(ButtonsArray[i]); //удаление i-того мувиклипа со сцены
ButtonsArray[i]=null; //удаление ссылки
}

Старый 03.09.2012, 16:56
spirit2 вне форума Посмотреть профиль Отправить личное сообщение для spirit2 Найти все сообщения от spirit2
  № 5  
Ответить с цитированием
spirit2

Регистрация: Dec 2009
Сообщений: 125
Ну да, конечно, ButtonsArray[i] в скобках. Не обратил внимание.

Старый 03.09.2012, 20:12
zerAlex2 вне форума Посмотреть профиль Отправить личное сообщение для zerAlex2 Найти все сообщения от zerAlex2
  № 6  
Ответить с цитированием
zerAlex2

Регистрация: Nov 2005
Сообщений: 148
RigidFlasher, это ты таким способом занулишь сам экземпляр? Или всё-таки объект в массиве?

Старый 03.09.2012, 20:18
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 7  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
непонятная строка в вашей функции destroy
Цитата:
Код AS3:
           var someObj:Object=this.parent.getChildByName(this.name);
           this.parent.removeChild(someObj);
Код AS3:
this.parent.removeChild(this);

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

Регистрация: May 2011
Сообщений: 301
Записей в блоге: 2
Цитата:
Сообщение от zerAlex2 Посмотреть сообщение
RigidFlasher, это ты таким способом занулишь сам экземпляр? Или всё-таки объект в массиве?
Для того, чтобы понимать, с чем именно вы работаете в массиве - с объектом или с элементом массива, нужно запомнить магическую фразу: в AS все переменные сложнее простых типов передаются как указатели на объект. Т.е. когда вы заносите что-то в массив, вы заносите не объект, а указатель на него. Соответственно выполняются и действия с элементами массива.
__________________
interplanety

Старый 04.09.2012, 06:17
RigidFlasher вне форума Посмотреть профиль Отправить личное сообщение для RigidFlasher Найти все сообщения от RigidFlasher
  № 9  
Ответить с цитированием
RigidFlasher

Регистрация: Dec 2011
Сообщений: 70
Код AS3:
ButtonsArray[i]=null; //удаление ссылки
Этой строчкой удаляется элемент массива, то есть указатель на объект, как уже было сказано сообщением выше. После этого, если на ButtonsArray[i] больше нет ссылок и на него не повешены слушатели события c сильными ссылками, то сборщик мусора удалит сам объект.

Старый 04.09.2012, 15:57
zerAlex2 вне форума Посмотреть профиль Отправить личное сообщение для zerAlex2 Найти все сообщения от zerAlex2
  № 10  
Ответить с цитированием
zerAlex2

Регистрация: Nov 2005
Сообщений: 148
А-а-а... всё понял. ButtonsArray[i] будет единсвенной ссылкой на объект, т.к. var button:MovieClip будет многократно перезаписан еще при создании кнопок и удалён при выходе из функции... Все, теперь понял.

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

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

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


 


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


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