Форум 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=179236)

Dr_Bra 10.05.2012 11:49

Удаление из памяти содержимого контейнера
 
Всем привет!
Подскажите, пожалуйста, как грамотно удалять содержимое контейнера? В админку грузятся странички презентации все swf. Админка может "прокручивать" странички вперед и назад. Странички содержат внутри себя анимацию и видео.

Внимание проблема. Когда запускаешь презентацию и начинаешь перелистывать страницы, контейнер в админки (в него все странички погружаются), он не удалет свое содержимое и видео, которое содержится в страничках, фоново проигрываются. Хотя перед глазами уже последний слайд статика и все, а вот звук от видео мы слышим. Как будто все странички остались воспроизводится фоновом режими.


Вот метод, которым я листаю страницы и пытаюсь чистить контейнер:
Код AS3:

private function iWantPageAction():void
                {
                        switch (iWantPage)// iWantPage - это переменная, которая увеличивается
//или уменьшается на 1 по нажатию клавиши ЛЕВО или ПРАВО
                        {
                                case 1:
                                        cont_page.removeChild(pageLoader);//cont_pag – тот самый
//контейнер в админке, куда я гружу страницы презентации и, который не вычищается
//из памятьи, чтоли..
                                        pageLoader = null;
                                        pageLoader = new Loader();
                                        pageLoader.load(new URLRequest('_parts/Page_01.swf') );
                                        cont_page.addChild(pageLoader);                                       
                                        break;
                                case 2:
                                        cont_page.removeChild(pageLoader);
                                        pageLoader = null;
                                        pageLoader = new Loader();
                                        pageLoader.load(new URLRequest('_parts/Page_02.swf') );
                                        cont_page.addChild(pageLoader);                                       
                                        break;
                                case 3:
                                        ...                               
                        }                               
                }


in4core 10.05.2012 12:15

Код AS3:

pageLoader.unloadAndStop();
pageLoader = null;


Dr_Bra 10.05.2012 12:18

Вы гений!

in4core 10.05.2012 13:02

плюсуйте тогда

Dr_Bra 19.06.2012 14:27

А если экземпляр класса сам себя удаляет?
На строку
Код AS3:

this = null;

ругается, нужно писать
Код AS3:

this == null;

??

Tails 19.06.2012 16:02

Dr_Bra
Вы при каждом нажатий лево/право повторно грузите один и тот-же swf? А почему так? Жёсткие ограничения по объёмам оперативной памяти ?

Проблема мне кажется в том, что в cont_page остается ссылка на старый загруженный объект pageLoader, pageLoader - ссылка на объект в памяти, вы очищаете ссылку pageLoader, но на это объект ещё ссылаеться список детей cont_page, потому объект остается в памяти.

= (оператор присваивания)
== (оператор сравнения)
Сильно разные вещи.

Самый годный путь решения:
Переписать и грузить каждый swf - 1 раз в некий массив. Затем при переходах - добавлять в список отображения cont_page нужный элемент из этого массива.


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

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