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

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

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

Регистрация: May 2008
Сообщений: 19
По умолчанию Классы и LoadMovieClip

AS2, MX2004

Приветствую всех.

У меня очередные проблемы с Flash, у меня они постоянно возникают, причём неразрешимые какие-то. На этот раз всё упёрлось в объём памяти.

Ситуация такая... Есть Swf, внутри у него (в библиотеке) лежат "символы", которые MovieClip. В них пофреймово хранятся картинки, такие типа мультики. Мувиков несколько штук, каждый в ActionScript экспортируется в виде одного и того же класса, пронаследованного от MovieClip.

Мувики показываются по желанию пользователя, между ними можно свободно переключатся. Оказывается, что показ такого мувика отъедает некоторое количество памяти, которая назад не отдаётся никогда.

На РС никаких проблем. Мувики показываются, память какое-то время отъедается, отъедается, потом, когда уже все картинки показаны хотя бы раз (это я так восстанавливаю картину происходящего по собственному разумению), процесс отъедания памяти останавливается, и дальше мувики показываются, а память уже не требуется. Ну увеличился объем ролика в памяти от 20 до 80 М, фигня какая. К слову, сам SWF вообще-то 5М, я изначально конкретно так парился насчёт размеров и старался всё минимизировать.

Потому что вот на КПК памяти всего 40 М. Ну и соответственно, в какой-то момент система наглухо завешивается. Наглухо.

Попытки использовать System.gc() ни к чему не привели. GC чистит совсем другую память, не ту, которая отводится под картинки и мувики. Все new-delet'ы я проверил, в принципе, проблема не в их. Память совершенно очевидно отъедается именно при показе картинок, которые ещё не показывались, это факт.

Как я сейчас вижу решение? Хочу попробовать мувики-мультики хранить не в библиотеке внутри swf, а в виде отдельных файлов swf, и подгружать их через loadMovie, а не attachMovie, как сейчас. Это вообще-то ужасно, потому что возникнут очевидные лаги при переключении мультиков и вообще вся изначальная проработанная концепция идёт к... Но мне хоть как-то надо разруливать ситуацию с памятью... Есть просто надежда, что unloadMovie вызовет хоть какую-то зачистку памяти от уже показанных изображений.

Собственно, Вопрос. Мувики внутри библиотеки у меня ассоциированы с классом. А как их ассоциировать с классом при хранении снаружи SWF? Код класса где должен быть? Помогите. пожалуйста, разобраться.

Старый 30.01.2009, 13:03
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Какой System.gc() в AS2?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

Регистрация: May 2008
Сообщений: 19
Не знаю, какой. Я сделал на таймлайне System.gc, синтакс-чекер заругался. Добавил import flash.system, всё заработало. Делает ли он зачистку или нет, мне неведомо, но по косвенным данным, делает. У меня сначала шла небольшая утечка памяти***, с использованием System.gc() она прекратилась. Это не отменило проблем с памятью под картинки, естественно, иначе я бы не задавал тогда глупых вопросов.

___
*** это не совсем правильный термин, в данном случае. Не утечка, а планомерное расходование, что ли. Я так подозреваю, что в какой-то момент GC эту память всё-таки должен чистить, просто без форсирования зачистки процесс освобождения идёт не часто, а довольно редко, хоть и периодически.


Последний раз редактировалось the_scratch; 30.01.2009 в 13:18.
Старый 30.01.2009, 13:16
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 4  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
1. System.gc - есть только в AS3.
2. System.gc - работает только в отладочных версиях плеера (отладочные версии плеера нужны только для AS3).
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 30.01.2009, 13:19
the_scratch вне форума Посмотреть профиль Отправить личное сообщение для the_scratch Найти все сообщения от the_scratch
  № 5  
Ответить с цитированием
the_scratch

Регистрация: May 2008
Сообщений: 19
В любом случае, System.gc() ситуацию мне не поправит никак.
С классами-то чего делать? :-)

Старый 30.01.2009, 14:01
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 6  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
А removeMovieClip используете?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

Регистрация: May 2008
Сообщений: 19
Сейчас - не использую. Все мувики-мультики одновременно существуют в памяти, но показывается только один из них. Не было смысла их удалять - зачем. если на них в любой момент может произойти переключение?

Сейчас (видимо) при переключения с одного мувика на другой мне придётся делать одному loadMovie, а другому removeMovieClip. Но пока я не пойму, как ассоциировать класс с подгружаемым мувиком (или наоборот, мувик с классом), я не продвинусь.

Вы имеете в виду, что стоит делать не loadMovie, а всё тот же attachMovie, но с одновременным removeMovieClip для того клипа, что выбывает из показа?

Старый 30.01.2009, 14:31
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 8  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Вы создали объект и если даже его прячете, он все равно существует в памяти. Конечно у вас будет память расходоваться.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 30.01.2009, 14:44
the_scratch вне форума Посмотреть профиль Отправить личное сообщение для the_scratch Найти все сообщения от the_scratch
  № 9  
Ответить с цитированием
the_scratch

Регистрация: May 2008
Сообщений: 19
Я это всё прекрасно понимаю. Проблема в другом. я же написал.
Или я непонятно как-то изъясняюсь?

Старый 30.01.2009, 14:48
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 10  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Вы написали, что у вас не чиститься память. Так?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

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

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


 


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


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