Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Порядок удаления мувика с приаттаченной битмапой. (http://www.flasher.ru/forum/showthread.php?t=155277)

mooncar 01.05.2011 08:37

Порядок удаления мувика с приаттаченной битмапой.
 
Как более корректно с т.зр. программирования и неконфиликтно для плеера при отработке:
Сперва удалить на сцене мувик с приаттаченной битмапой, а потом сделать ей dispose() или лучше наоборот?
Точный и однозначный ответ тут возможен?
(В вопросе видимость или невидимость этого мувика , то есть что там на сцене, не учитывается).

dark256 01.05.2011 10:38

А собственно для чего это служит? Чистить память так, чтобы не было утечки?

У меня вот такая конструкция:

Код AS1/AS2:

function getBitMap( mov:MovieClip, linkageId:String ){
        var myBitmapData:BitmapData = BitmapData.loadBitmap(linkageId)
        mov.attachBitmap(myBitmapData, 10)
        mov.forceSmoothing = true
        return myBitmapData
}
 
createEmptyMovieClip( "МЕНЮ", 100 )
//и в цикле создаем картинки-клипы-элементы меню
  МЕНЮ.attachMovie - эл-т_меню
  эл-т_меню.createEmptyMovieClip - картинка
  getBitMap(эл-т_меню, картинка_Z)

Когда меню листается ( типа список многостраничный ) я удаляю текущую страницу меню, просто напросто повторяя createEmptyMovieClip( "МЕНЮ", 100 ). Закрывая окно я для всего интерфейса делаю removeMovieClip.

Память не течет, глюков не возникает, все как часы. Собственно отчего ты уже неск. дней вылавливаешь такие тонкие нюансы? :)

mooncar 01.05.2011 11:14

Цитата:

Сообщение от dark256 (Сообщение 993116)
Память не течет, глюков не возникает, все как часы. Собственно отчего ты уже неск. дней вылавливаешь такие тонкие нюансы? :)

Оттого, dark, что наборы картиночек на сотни мегабайт. В нужный момент не очистил память или попытался приаттачить битмапу к несуществующиму ролику, или еще что - крах плеера.
В принципе, сейчас всё работает сносно, в паре разделов на сцену даже выводится около 25 мБ графики с частотой 25 fps (то есть около полугига лосслесс графики в секунду - картинки 3500 на 1900) , но косячки еще есть и связаны они как раз с событийной схемой. То есть без dispose() никак. А вот работает dispose иногда странно - очистка вроде проходит (графика на сцене пропала), но по дистпетчеру Windows видно, что виртуальная и рабочая память не уменьшилась.
И только после перехода к новой сюжетной сцене занимаемый объем сразу падает.

Добавлено через 9 минут
Цитата:

Сообщение от dark256 (Сообщение 993116)
Память не течет, глюков не возникает, все как часы.

Если у тебя количество BitmapData в мегабайтах на весь ролик ограниченное, и нет явных косяков, то и не будет течь.
Утечка, например, возникает, если как у меня при смене отрисовываемого кадра не сделать dispose() предыдущей приаттаченной битмапе на данном уровне. За 5 секунд - 1,5 гига в ОЗУ и вылет.

Примерно такая функция работает на событие EnterFrame:
Код AS1/AS2:

function seqShowFrame(seq:String, frame:Number)
{
        mc.pic.removeMovieClip();
        mc.bmp.dispose();
 
        linknum = ... frame ...   
 
        var linkageId:String = seqData[seq]['prefix'] + linknum + seqData[seq]['suffix'];
        ...
        if (frame <= seqData[seq][1]['last']) lib = seqData[seq][1]['lib'];
        if (frame >= seqData[seq][2]['first'] && frame <= seqData[seq][2]['last']) lib = seqData[seq][2]['lib'];
        if (frame >= seqData[seq][3]['first'] && frame <= seqData[seq][3]['last']) lib = seqData[seq][3]['lib'];       
        if (frame >= seqData[seq][4]['first'] && frame <= seqData[seq][4]['last']) lib = seqData[seq][4]['lib'];
 
        mc.bmp = lib.getBitmap(linkageId);
        ..
        var pic:MovieClip = mc.createEmptyMovieClip('pic', 0);
        pic.attachBitmap(mc.bmp, 0);       
}

Поскольку на каждую сцену 4 бблиотеки (не удалось собрать в одну), поэтому и битмапа так сложно извлекается. Но я переделаю :)

dark256 01.05.2011 23:10

А. Ясно. Я просто не понял какие объемы данных там у тебя циркулируют :)
Да уж! Тут есть над чем задуматься...
По мануалам порылся, внятного не нашел ничего...
Гы. Тебе еще надо учесть скорость работы виндового свопа... Тут...
А что в итоге, если не секрет, из всего этого должно получиться-то? Не подумать ли об оптимизации всего этого потока в виде видео, простите за тавтологию :)

mooncar 02.05.2011 03:36

Да, видно как работает своп, интересно получается. Свопится всё не сразу. Стенделоун плеер и IDE немного по-разному это делают, поэтому тестирую сразу в нем.
А с видео качество теряется, делать видео несжатое - шило на мыло.
Это всего лишь презентация, ничего интересного, зато экспы!... :)


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

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