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

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

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

Регистрация: Mar 2011
Сообщений: 25
По умолчанию Удалить все MovieClip

Подскажите пожалуйста, как можно найти и удалить все ранее динамически созданные объекты MovieClip?
Т.е. сгенерировал 100 объектов
Код AS3:
var obmv:MovieClip;
var i:uint;
function getmv():MovieClip
{
	var FigureClass:Class = getDefinitionByName("obj");
	return new FigureClass() as MovieClip;
}
for (i = 0; i < 100; i++){
obmv=getmv();
obmv.x = Math.floor(Math.random() * 800);
obmv.y = Math.floor(Math.random() * 600);
addChild(obmv);}
Хочу сгенерировать еще 100 вместо старых, как удалить все старые объекты?

Старый 12.03.2011, 19:38
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 2  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Загоните все созданные в вектор, потом по вектору, пробежавшись, удалите.
__________________
тут я

Старый 12.03.2011, 19:40
$mival вне форума Посмотреть профиль Отправить личное сообщение для $mival Найти все сообщения от $mival
  № 3  
Ответить с цитированием
$mival
 
Аватар для $mival

Регистрация: Oct 2005
Адрес: Russia, Irkutsk
Сообщений: 742
без разницы как они были созданы, "динамически" или нет.
если нужно как-то отделить положите их в отдельный контейнер
__________________
smival.com

Старый 12.03.2011, 19:59
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 4  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Кстати, вот меня периодически интересует вопрос, когда я в очередной раз чищу очередной контейнер. Очистка по второму методу не будет быстрее и правильнее?

Код AS3:
	var container:Sprite = new Sprite();
	addChild(container);
 
	for (var i:int = 0; i < 500; i++) 
	{
		var object:Sprite = new Sprite();
		container.addChild(object);
	}
 
	// Очистка - метод 1
	while (container.numChildren > 0) container.removeChildAt(0);
 
	// Очистка - метод 2
	var containerIndex:int = getChildIndex(container);
	removeChild(container);
	container = new Sprite();
	addChildAt(container,containerIndex);


Последний раз редактировалось mikhailk; 12.03.2011 в 20:09.
Старый 12.03.2011, 20:02
mmvds вне форума Посмотреть профиль Отправить личное сообщение для mmvds Найти все сообщения от mmvds
  № 5  
Ответить с цитированием
mmvds

Регистрация: Mar 2011
Сообщений: 25
Спасибо, загнал все в Vector.<MovieClip> потом очистил
И все же, неужели нет метода для нахождения на кадре id объектов определенного типа?

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

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Нативного - нет. Но если циклом от 0 до numChild пробегаться с проверкой на is MovieClip, то можно сделать.

Добавлено через 2 минуты
Пардон, от numChild до 0.
__________________
тут я

Старый 12.03.2011, 21:39
mmvds вне форума Посмотреть профиль Отправить личное сообщение для mmvds Найти все сообщения от mmvds
  № 7  
Ответить с цитированием
mmvds

Регистрация: Mar 2011
Сообщений: 25
И все же, что-то делаю не так
Код AS3:
var obmv:Vector.<MovieClip> = new Vector.<MovieClip>();
var i:uint;
function getmv():MovieClip
{
	var FigureClass:Class = getDefinitionByName("obj");
	return new FigureClass() as MovieClip;
}
for (i = 0; i < 100; i++){
obmv[obmv.length]=getmv();
obmv[obmv.length-1].x = Math.floor(Math.random() * 800);
obmv[obmv.length-1].y = Math.floor(Math.random() * 600);
addChild(obmv);}
//сгенерировал
//теперь удаляю
for (i = 0; i < obmv.length; i++)
{
	this.removeChild(obmv[i]);
}
//с экрана все исчезло, но
trace(obmv.length);//выдает 100, хотя все объекты удалены
Первый раз все создается и удаляется нормально, когда создаю объекты второй раз они создаются, но когда второй раз удаляю, вылетает ошибка:
Цитата:
ArgumentError: Error #2025: Предоставленный DisplayObject должен быть дочерним элементом вызывающего объекта.
at flash.display:isplayObjectContainer/removeChild()
Я так думаю что это из-за неправильного удаления объектов?


Последний раз редактировалось mmvds; 12.03.2011 в 21:44.
Старый 12.03.2011, 21:57
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 8  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
не почистили вектор

Код AS3:
obmv = new Vector.<MovieClip>();

Старый 12.03.2011, 22:31
mmvds вне форума Посмотреть профиль Отправить личное сообщение для mmvds Найти все сообщения от mmvds
  № 9  
Ответить с цитированием
mmvds

Регистрация: Mar 2011
Сообщений: 25
Спасибо, все работает!

Старый 13.03.2011, 01:44
3p.station вне форума Посмотреть профиль Отправить личное сообщение для 3p.station Найти все сообщения от 3p.station
  № 10  
Ответить с цитированием
3p.station
 
Аватар для 3p.station

блогер
Регистрация: Oct 2009
Адрес: кочевник. Киев
Сообщений: 453
Записей в блоге: 5
Цитата:
Сообщение от mikhailk Посмотреть сообщение
Кстати, вот меня периодически интересует вопрос, когда я в очередной раз чищу очередной контейнер. Очистка по второму методу не будет быстрее и правильнее?

Код AS3:
	var container:Sprite = new Sprite();
	addChild(container);
 
	for (var i:int = 0; i < 500; i++) 
	{
		var object:Sprite = new Sprite();
		container.addChild(object);
	}
 
	// Очистка - метод 1
	while (container.numChildren > 0) container.removeChildAt(0);
 
	// Очистка - метод 2
	var containerIndex:int = getChildIndex(container);
	removeChild(container);
	container = new Sprite();
	addChildAt(container,containerIndex);
действительно интересно
__________________
мира и гармонии

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

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

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


 


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


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