![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jun 2010
Сообщений: 37
|
КорДум
А ссылка на один экземпляр только одна может быть? Отмирает перменная cur_movie, которая определена в функции, и отмирает ссылка вместе с ней. А какое отношение имеет спрайт к функции? Он же как был до выполнения функции, так и остался после. По идее спрайт, это как переменная, описаная вне функции. Точнее объект, в котором есть переменная (динамический массив или еще что-то типа того) для хранения ссылок на child'ов. Я, кстати, вообще запутался как выделяется память в AS3... Почему, например, память выделяется не сразу под весь MovieClip, а во время его проигрывания, и для каждого кадра отдельно... Т.е. Я проигрываю MovieClip с последовательностью из 1000 jpeg'ов, так вот память отжирается все это время. В смысле, с каждым кадром свободной памяти становится все меньше. Последний раз редактировалось ignition; 07.06.2010 в 11:39. |
|
|||||
|
Я не могу найти статью в инете, так что дам номер страницы в книге Мука "ActionScript 3.0 Подробное руководство". То, что вас так интересует, описано на странице 537. Там и про ссылки, и про обнуление, и про память.
Про вторую часть вашего поста ничего сказать не могу - я не сведущ в этом. Добавлено через 12 минут [IMG]http://s003.***********/i203/1006/96/457626f1719ft.jpg[/IMG]
__________________
тут я |
|
|||||
|
Регистрация: Jun 2010
Сообщений: 37
|
Спасибо. Прочитал.
И что здесь расходится с тем, что я написал? Ссылок на один объект, если верить тексту, может быть несколько. Одна из них (cur_movie) отмирает. А в video_container_mc ссылка есть. Или в объекте parent нет ссылки на child? |
|
|||||
|
Регистрация: Jun 2010
Сообщений: 37
|
Может продолжать проигрыватся. Я же писал, что в последнем фрейме MovieClip'ов у меня stop() стоит.
|
|
|||||
|
Регистрация: Jun 2010
Сообщений: 37
|
Ок. Есть предложение отвлечься от теории...
и решить одну проблему - как мне получить доступ к ссылке в моей схеме? В момент, когда я делаю:имени объекта (точнее имени экземпляра) уже нет, обратиться к нему по имени уже не получится. Нужно как-то выходить на ссылку через video_container_mc. Как это делается? Последний раз редактировалось ignition; 08.06.2010 в 00:18. |
|
|||||
|
Цитата:
__________________
...вселенская грусть |
|
|||||
|
Регистрация: Jun 2010
Сообщений: 37
|
gloomyBrain
Т.е. так? : var counter:int=-1; var forward:Array=new Array(clip1_mc,clip2_mc,clip3_mc,clip4_mc,clip5_mc,clip6_mc); stop(); ..... function goNext(event:MouseEvent) { if (video_container_mc.numChildren) { var mc_for_kill:MovieClip = video_container_mc.getChildAt(0) as MovieClip; video_container_mc.removeChildAt(0); mc_for_kill=null; }; counter=(counter+1)%6; var cur_movie:MovieClip=new forward[counter]; video_container_mc.addChild(cur_movie); }; ..... next_btn.addEventListener(MouseEvent.CLICK, goNext); Проверил. Обратиться можем, ошибок не вылезает... т.е. можно сделать вывод, что память не освободилась. Так? Кстати, а в AS3 есть какие-то средства контроля памяти? Есть какая-то ф-ция выводящая инфу? По идее, если бы не было ссылки, то уже здесь: вылезла бы ошибка PS Изменение кода ни как не повлияло на проблемы с памятью. Она все равно забита. Последний раз редактировалось ignition; 08.06.2010 в 01:30. |
|
|||||
|
Цитата:
Цитата:
Цитата:
К объекту можно обратиться как через clip1_mc, так и через getChildAt(0) - это ссылки на один и тот же объект. Объект станет доступным для "поедания" gc только после выполнения ЗЫ кстати, после removeChildAt(0) пустых глубин не остается, то есть все объекты в контейнере "упадут" на одну позицию. Теперь на нулевом индексе будет сидеть объект, который раньше был на 1-м
__________________
...вселенская грусть |
![]() |
![]() |
Часовой пояс GMT +4, время: 16:25. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|