![]() |
Удаление переменных мувиклипа
Всем привет.
При удалении мувиклипа - нужно обнулять его переменные (массивы в том числе) или достаточно removeChild и Object = null? У меня почему-то разрастается память, которую использует флешка. Хотя, все объекты - удаляются и ничего вроде не должно оставаться. Может быть причина в неудалении переменных мувиклипа? |
Удаление переменных и обнуление ссылок, присвоенных переменным - это совсем разные вещи.
Если в них хранятся картинки, то битмапдату этих картинок нужно так же уничтожать. То есть просто занулить ссылки будет недостаточно. Так же нужно отписаться от всех событий и удалить объект из всех массивов. Ссылок на него не должно оставаться нигде. |
Допустим, у меня вот есть код удаления ракеты, если она вылетела за пределы боевого поля:
Код AS3:
Вот класс самой ракеты: Код AS3:
Код AS3:
И ещё и ship02Rockets[i].speed и другие переменные тоже принудительно удалять? |
Обнулять ссылки вообще не рекомендуется (в лучшем случае). Во-первых, после обнуления ссылок эти объекты все равно будут существовать в памяти пока до них не доберется сборщик мусора, а во-вторых, в вашем случае логичней всего было бы заново использовать эти объекты, которые вышли за рамки экрана. Создайте пул объектов и дергайте оттуда то, что вам нужно.
Стоит стараться использовать одни и те же объекты несколько раз вместо того, чтобы каждый раз создавать новые. |
Или можете использовать синглтоны
|
Цитата:
Опытным путём было выяснено что обнулять переменные в удаляемом мувике - нет смысла, они итак удаляются. Но что-то всё же остаётся. И это "что-то" - тяжело найти. Я уже начал битмапдаты записывать в массив, чтоб при удалении мувика делать dispose битмапдате в нём. Вроде чуть лучше стало работать приложение. Но где-то всё равно дыры ещё есть :( |
Сделай на сцене кнопку, повешай на нее System.gc(). Запусти дебаг режим и проверь, связана ли нагрузка с удалением ссылок.
|
http://help.adobe.com/ru_RU/as3/mobi...ng_content.pdf
Вот здесь во второй главе подробно описано про оптимизацию работы с памятью |
Проблема решилась другим способом.
Когда заканчивалась игра - всё на экране замирало (все функции по созданию объектов, перемещению и проверки на столкновения не работали). Герой в это время взрывается (идёт цикл взрывов) и экран улетет и идёт очистка сцены с помощью: Код AS3:
Так вот. Почему-то gc не удалял из памяти всю эту прелесть. Как заканчивал я игру в уровне с занятой памятью в 90Мб, так новый уровень с 90Мб и начинался. А закончив этот - занятая память разрасталась до 110 (допустим) и т.д. Решил задачу тем, что продолжил движение объектов на сцене после смерти героя. Только включив условие их уничтожения (различными способами), пока он взрывается. В результате, когда запускался код с циклом while - объектов на сцене уже почти не оставалось и gc (почему-то только теперь!) теперь действительно удалял всё, что было нужно удалить, а не оставлял это преспокойно в памяти. Вот, как-то так. Мда... Добавлено через 2 часа 3 минуты Ссылка на мувик, оставшаяся в массиве - может помешать gc удалить этот мувик? |
Если на массив есть ссылка, а в массиве есть мувик, то он (мувик) не удалится
http://www.adobe.com/devnet/actionsc...ollection.html вот тут больше про механизмы работы GC http://www.skinkers.com/2010/10/08/m...ge-collection/ тут практические примеры эффективного удаления объектов и самая веселая статья: Motherfucking AS3 Garbage Collection которая описывает вашу ситуацию, только в большем масштабе) |
| Часовой пояс GMT +4, время: 17:01. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.