Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   нужно ли уничтожать загруженные, но уже ненужные клипы? (http://www.flasher.ru/forum/showthread.php?t=138447)

filepark 08.04.2010 07:09

нужно ли уничтожать загруженные, но уже ненужные клипы?
 
:umnik2:Добрый день.
Есть задача: периодически в презентацию нужно загрузить 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’ы (каждый не меньше мегабайта)?

Wolsh 08.04.2010 08:23

Цитата:

6. при полной загрузке, передаю swf в контейнер vrFace: vrFace= mySwf;
Ничего Вы тут не передаете в контейнер, Вы присваиваеье переменной vrFace значение из переменной mySwf.
Цитата:

7. контейнер с swf вывожу на экран за vrBack: addChildAt(vrPano, getChildIndex(vrBack));
А был вроде vrFace, теперь какой-то vrPano... Зачем заставлять плеер считать getChildIndex(vrBack), если двумя шагами ранее Вы собственной рукой сказали ему четко: 0 ?
Цитата:

передаём его в vrFace, который за vrBack
))) Говорящие названия)) Сами не путаетесь?
Вобщем непонятно из этого описания отношения mySwf/vrFace/vrPano, поэтому невозможно понять, что и как Вы пытаетесь/не пытаетесь удалить. Разъясните.

filepark 08.04.2010 12:57

Код 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);


Wolsh 08.04.2010 13:17

Ойёй... это все в кадре чтоли написано? Функции внутри функций... отсутствие типизаций... мой компиллятор никогда бы такое не скомпиллил..
По 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" когда все наоборот, откуда известен теперь и что это меняет...
Увидеть бы Ваш класс для загрузки.


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

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