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

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

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

Регистрация: Jul 2009
Сообщений: 77
По умолчанию нужно ли уничтожать загруженные, но уже ненужные клипы?

Добрый день.
Есть задача: периодически в презентацию нужно загрузить swf или jpg, причём новый swf или jpg нужно загрузить поверх старого с каким-нибудь эффектным переходом.
Я делаю так:
1. создаю контейнер vrBack
2. вывожу на экран: addChildAt(vrBack, 0);
3. создаю контейнер vrFace
4. для загрузки требуемого swf или jpg использую специальный класс
5. создаю объект mySwf этого класса
6. при полной загрузке, передаю swf в контейнер vrFace: vrFace= mySwf;
7. контейнер с swf вывожу на экран за vrBack: addChildAt(vrPano, getChildIndex(vrBack));
8. вызываю функцию эффектного перехода, которая заканчивается очисткой vrBack, т.о. появляется vrFace, содержащий только что загруженный swf: vrBack.removeChildAt(0);
9. когда возникает надобность загрузить новый swf, я передаю старый swf в vrBack: vrBack.addChild(vrPano);
10. переходим в п.4, т.е. создаём объект, передаём его в vrFace, который за vrBack, затем vrBack исчезает показывая vrFace с новым swf.

В этом алгоритме меня беспокоит то, что я явно не уничтожаю уходящие swf’ы. Периодически моя прога зависает, не является ли причиной загруженные и где-то хранящиеся swf’ы (каждый не меньше мегабайта)?

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
6. при полной загрузке, передаю swf в контейнер vrFace: vrFace= mySwf;
Ничего Вы тут не передаете в контейнер, Вы присваиваеье переменной vrFace значение из переменной mySwf.
Цитата:
7. контейнер с swf вывожу на экран за vrBack: addChildAt(vrPano, getChildIndex(vrBack));
А был вроде vrFace, теперь какой-то vrPano... Зачем заставлять плеер считать getChildIndex(vrBack), если двумя шагами ранее Вы собственной рукой сказали ему четко: 0 ?
Цитата:
передаём его в vrFace, который за vrBack
))) Говорящие названия)) Сами не путаетесь?
Вобщем непонятно из этого описания отношения mySwf/vrFace/vrPano, поэтому невозможно понять, что и как Вы пытаетесь/не пытаетесь удалить. Разъясните.
__________________
Reality.getBounds(this);

Старый 08.04.2010, 12:57
filepark вне форума Посмотреть профиль Отправить личное сообщение для filepark Найти все сообщения от filepark
  № 3  
Ответить с цитированием
filepark

Регистрация: Jul 2009
Сообщений: 77
Код AS3:
var vrBack:MovieClip=new MovieClip();//создаём мувиклип ему будет передана уходящая панорама при загрузке новой
var vrBackTemp:MovieClip=new MovieClip();//создаём пустой мувиклип для загрузки в бэкмуви (нужен для первой загрузки)
addChildAt(vrBack, 0);
vrBack.addChild(vrBackTemp);
 
var vrPano;//потом приравняем к нему объект с swf или jpg
 
function loadMySwf(id:uint) {
 
	var mySwf:MySwfClass=new MySwfClass(id);//создаём объект с загруженным swf, для jpg другой класс MyJpgClass, я его не показываю
	vrPano=vrPn; //приравниваем к vrPano, т.к. до сих пор небыл известен класс загружаемого объекта расширение MovieClip или BitMap
 
	addChildAt(vrPano, getChildIndex(vrBack));//добовляем vrPano в список отображения за vrBack, т.о. сейчас vrBack закрывает vrPano
	//для определения положения vrBack использую метод getChildIndex, т.к. кроме vrBack и vrPano в у меня есть и другие клипы не показанные здесь
 
	function init_vrPano(e:Event):void {
		if (vrPano.initedPano) {//vrPano.initedPano - метод определяющий момент полной загрузки swf/jpg
			removeEventListener(Event.ENTER_FRAME, init_vrPano);
			disapp_vrBack();//вызываем функцию исчезновения vrBack, чтобы показать vrPano
		}
	}
	addEventListener(Event.ENTER_FRAME, init_vrPano);//ждём полную загрузку swf/jpg, когда это происходит вызываем disapp_vrBack()
 
	function disapp_vrBack():void {
		//здесь код описывающий исчезновение vrBack, не привожу
		vrBack.removeChildAt(0);//vrBack очищен
	}
 
	//здесь код, в определённых условиях вызывающий loadMySwf();
 
}
 
loadMySwf(0);


Последний раз редактировалось filepark; 08.04.2010 в 13:01.
Старый 08.04.2010, 13:17
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 4  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Ойёй... это все в кадре чтоли написано? Функции внутри функций... отсутствие типизаций... мой компиллятор никогда бы такое не скомпиллил..
По Event.ENTER_FRAME определяли загрузку в прошлом веке и в другой модели событий.
Вложенные функции не просто зло. Это нельзя.
Не знаете, Bitmap или MovieClip - используйте тип DisplayObject.
Вам бы почитать чего-нибудь, причем по ас3. И не писать больше в кадрах, это дурно.

Добавлено через 27 минут
Да, еще... у Вас в коде я так и не нашел ничего про добавление и удаление, но по комментариям у меня сложилось ощущение, что Вы сначала добавляете что-то из переменной методом addChild, а потом присваиваете этой переменной новое значение и считаете, что в контейнере теперь это новое.
Код AS3:
vrPano = mySWF;
addChild(vrPano);
это СОВСЕМ не то же самое что
Код AS3:
addChild(vrPano);
vrPano = mySWF;
Во втором случае Вы только изменяете ссылку в переменной, добавленный в контейнер объект при этом конечно же не меняется.
Код AS3:
vrPano=vrPn; //приравниваем к vrPano, т.к. до сих пор небыл известен..
Самая загадочная строчка.. Что за vrPn, почему "к vrPano" когда все наоборот, откуда известен теперь и что это меняет...
Увидеть бы Ваш класс для загрузки.
__________________
Reality.getBounds(this);

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

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

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


 


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


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