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

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

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

Регистрация: Jun 2012
Сообщений: 16
По умолчанию можно ли удалить контейнер таким образом?

создается и заполняется контейнер так:
Код AS3:
function textLoaded(e:Event):void
{
	xml = XML(urlLoader.data);
	xmlList = xml.image;
	initGallery();
}
function initGallery():void
{
	var numOfItems:Number = xmlList.length();
	var counter:Number = 0;
	for (var i:int = 0; i<numOfItems; i++)
	{
		var container:MovieClip = new MovieClip();
		var item:Loader = new Loader();
		item.x = (55 + 5) * i;
		container.big = (xmlList[counter].imgURL);
		container.mouseChildren = false;
		item.load(new URLRequest(xmlList[counter].imgSmallURL));
		container.addChild(item);
		container.addEventListener(MouseEvent.CLICK, showBig);
		addChild(container);
		counter++;
	}
}
а удаляться должен так:
Код AS3:
function hideGallery(e:MouseEvent):void
{
	removeChild(container);
}
управляется двумя слушателями:
Код AS3:
btn_show.addEventListener(MouseEvent.CLICK, showGallery);
btn_hide.addEventListener(MouseEvent.CLICK, hideGallery);
они вызывают функции:
Код AS3:
function showGallery(e:MouseEvent):void
{
	urlLoader.addEventListener(Event.COMPLETE,textLoaded);
	urlLoader.load(new URLRequest("xml/bassein.xml"));
}
и соответственно:
Код AS3:
function hideGallery(e:MouseEvent):void
{
	removeChild(container);
}
при компиляции получаю ошибку:
1120: Обращение несуществующего свойства container.

Старый 03.12.2012, 02:19
Ленок вне форума Посмотреть профиль Отправить личное сообщение для Ленок Найти все сообщения от Ленок
  № 2  
Ответить с цитированием
Ленок

Регистрация: Nov 2012
Сообщений: 31
Код AS3:
item.parent.parent.removeChild(item.parent)

Старый 03.12.2012, 02:34
mheha вне форума Посмотреть профиль Отправить личное сообщение для mheha Найти все сообщения от mheha
  № 3  
Ответить с цитированием
mheha

Регистрация: Jun 2012
Сообщений: 16
Цитата:
Сообщение от Ленок Посмотреть сообщение
Код AS3:
item.parent.parent.removeChild(item.parent)
ошибка изменилась на: 1120: Обращение несуществующего свойства item.

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

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

Старый 03.12.2012, 02:48
mheha вне форума Посмотреть профиль Отправить личное сообщение для mheha Найти все сообщения от mheha
  № 5  
Ответить с цитированием
mheha

Регистрация: Jun 2012
Сообщений: 16
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Ничего не понял. Создается сотня мувиклипов (зачем мувиклипов?) контейнеров, ссылки на которые нигде не сохраняются, а потом, при нажатии одной кнопки Вы требуете удалить какой-то контейнер. Какой?
создаются кнопки из xml (item) и помещаются внутрь контейнера (container), и он добавляется на сцену, кнопки показывают нужную картинку из галереи, я предположил что для того чтобы закрыть галерею полностью нужно просто удалить контейнер со сцены, в котором создаются кнопки (item)

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Вы не ответили на вопрос.
Код AS3:
btn_hide.addEventListener(MouseEvent.CLICK, hideGallery);
Есть некая одна кнопка btn_hide, при нажатии на которую выполняется хендлер
Код AS3:
function hideGallery(e:MouseEvent):void
{
	removeChild(container);
}
Что именно Вы имели в виду здесь под "container"? Какой из множества?
Другими словами, знает ли кнопка, или ее обработчик, какой именно контейнер имеется в виду? (речь сейчас не о коде, не о значении переменной container, а просто о логике).
Эта кнопка — одна на всю галерею из множества контейнеров? Или она сама находится в контейнере? Вы скрыли наиболее важную информацию.
__________________
Reality.getBounds(this);

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

Регистрация: Jun 2012
Сообщений: 16
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Вы не ответили на вопрос.
Код AS3:
btn_hide.addEventListener(MouseEvent.CLICK, hideGallery);
Есть некая одна кнопка btn_hide, при нажатии на которую выполняется хендлер
Код AS3:
function hideGallery(e:MouseEvent):void
{
	removeChild(container);
}
Что именно Вы имели в виду здесь под "container"? Какой из множества?
Другими словами, знает ли кнопка, или ее обработчик, какой именно контейнер имеется в виду? (речь сейчас не о коде, не о значении переменной container, а просто о логике).
Эта кнопка — одна на всю галерею из множества контейнеров? Или она сама находится в контейнере? Вы скрыли наиболее важную информацию.
я наверное неправильно понял как это работает. Не будете ли Вы так любезны указать в чем моя ошибка и в каком направлении двигаться к решению задачи?
код целиком:
Код AS3:
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.display.MovieClip;
import flash.ui.Mouse;
 
btn_show.addEventListener(MouseEvent.CLICK, showGallery);
btn_show2.addEventListener(MouseEvent.CLICK, showGallery2);
btn_hide.addEventListener(MouseEvent.CLICK, hideGallery);
 
var urlLoader:URLLoader = new URLLoader();
var xml:XML;
var xmlList:XMLList;
var loaderBig:Loader = new Loader  ;
var imgShowBig:Boolean = false;
 
//скрывает галлерею
function hideGallery(e:MouseEvent):void
{
	removeChild(container);
}
 
//показывает 1-ю галлерею
function showGallery(e:MouseEvent):void
{
	urlLoader.addEventListener(Event.COMPLETE,textLoaded);
	urlLoader.load(new URLRequest("xml/bassein.xml"));
	if (imgShowBig == true)
	{
		removeChild(loaderBig);
		imgShowBig = false;
	}
}
//показывает 2-ю галлерею;
function showGallery2(e:MouseEvent):void
{
	urlLoader.addEventListener(Event.COMPLETE,textLoaded);
	urlLoader.load(new URLRequest("xml/sanuzel.xml"));
	if (imgShowBig == true)
	{
		removeChild(loaderBig);
		imgShowBig = false;
	}
}
loaderBig.addEventListener(MouseEvent.CLICK, hideBigLoader);
function textLoaded(e:Event):void
{
	xml = XML(urlLoader.data);
	xmlList = xml.image;
	initGallery();
}
function initGallery():void
{
	var numOfItems:Number = xmlList.length();
	var counter:Number = 0;
	for (var i:int = 0; i<numOfItems; i++)
	{
		var container:MovieClip = new MovieClip();
		var item:Loader = new Loader();
		item.x = (55 + 5) * i;
		container.big = (xmlList[counter].imgURL);
		container.mouseChildren = false;
		item.load(new URLRequest(xmlList[counter].imgSmallURL));
		container.addChild(item);
		container.addEventListener(MouseEvent.CLICK, showBig);
		addChild(container);
		counter++;
	}
}
function showBig(e:MouseEvent):void
{
	loaderBig.load(new URLRequest(e.target.big));
	loaderBig.y = 55;
	loaderBig.x = 27;
	addChild(loaderBig);
	imgShowBig = true;
}
function hideBigLoader(e:MouseEvent):void
{
	if (imgShowBig == true)
	{
		removeChild(loaderBig);
		imgShowBig = false;
	}
}

Старый 03.12.2012, 03:31
Prokter вне форума Посмотреть профиль Отправить личное сообщение для Prokter Найти все сообщения от Prokter
  № 8  
Ответить с цитированием
Prokter

Регистрация: Oct 2012
Сообщений: 10
Попробуйте при создании контейнеров записать их в один вектор или массив
Код AS1/AS2:
private var _containerArray:Array;
.....
_containerArray.push(container);
а потом по очереди их уничтожить:
Код AS1/AS2:
		private function hideGallery(e:MouseEvent):void 
		{
			for (var i:int = 0; i<numOfItems; i++) {
				var container:MovieClip = new MovieClip();
				container = _containerArray[i] as MovieClip;
				removeChild(container );
				container = null;
 
			}
}
Как-то так.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Не будете ли Вы так любезны указать в чем моя ошибка
Если бы мог — сказал бы сразу. Я просто не могу понять, чего Вы хотите. Но объяснять Вы точно не хотите. Почему Вы думаете, что я что-то пойму из неработающего кода? Мне абсолютно непонятна взаимосвязь кнопки и контейнеров. Вообще никак не понятно, какой контейнер должен удаляться.
Сколько раз я спросил об этом?

И, как модератор, хочу попросить — не надо каждый раз цитировать целиком предыдущее сообщение. Оно здесь и никуда не делось. Цитируйте какой-то фрагмент, если это действительно требуется, или если между сообщением, на которое Вы отвечаете и Вашим ответом уже настрогали несколько сообщений.

Добавлено через 7 минут
Prokter, а зачем создавать новый экземпляр мувиклипа там, где задача была и от старого то избавиться?
Если надо удалить ВСЕ контейнеры, то я бы просто совал все эти лоадеры в один общий контейнер и при необходимости даже его не удалял, а просто очищал с помощью removeChildren(). Поскольку никаких ссылок на лоадеры нет, мусорщик их соберет, как проснется.
__________________
Reality.getBounds(this);

Старый 03.12.2012, 03:53
mheha вне форума Посмотреть профиль Отправить личное сообщение для mheha Найти все сообщения от mheha
  № 10  
Ответить с цитированием
mheha

Регистрация: Jun 2012
Сообщений: 16
спасибо за подсказку, попробую, насчет замечания - учту.
суть в следующем: создается галерея с миниатюрами, по клику на миниатюру открывается полная картинка. Чтобы перейти от галереи к другому разделу сайта нужно эту галерею как-то скрыть или удалить. Кнопка - пункт меню сайта.
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Если надо удалить ВСЕ контейнеры, то я бы просто совал все эти лоадеры в один общий контейнер и при необходимости даже его не удалял, а просто очищал с помощью removeChildren(). Поскольку никаких ссылок на лоадеры нет, мусорщик их соберет, как проснется.
а подробнее можете пояснить как сунуть все лоадеры в общий контейнер и потом очистить его?

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

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

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


 


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


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