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

darkvam 10.09.2008 08:06

Как гарантировано удалить мувиклип?
 
история такая. ролик сильно тормозит. Но все создаваемые мувики тщательно отслеживаю и удаляю removeMovieClip(). счётчик мувиков показывает, что мувиков в сцене не больше 40, однако через несколько минут игры ролик начинает просто ужасно тормозить. Я уже все пути испробывал. есть ли более надёжный способ удалить мувик?

darksranger 10.09.2008 08:23

поиск-утечка памяти

darkvam 10.09.2008 12:37

было уже. я искал - никак не относиться к моей проблемме. ничего не помогает.

qazwsx 10.09.2008 12:54

У тебя почти наверника мувики заносятся в массив. Ты удаляеш мувиклип а массив в итоге все ростет и ростет, а ты делаеш сравнение по всем элементам массива... Ну или что небудь вроде этого). Ищи утечки

darkvam 10.09.2008 15:17

qazwsx
точно так наверное и есть((( а как можно избавиться? удалять значение ещё и из массива?

Division 10.09.2008 15:40

Цитата:

удалять значение ещё и из массива
Ну да, а как ещё? (:

Obi 10.09.2008 16:10

Код:

mc.removeMovieCLip();
delete mc;

Сборщик мусора удаляет объект из памяти только когда никто на него больше не ссылается, по этому нужно удалять все ссылки на объект.

darkvam 10.09.2008 16:19

Division
скажи пожалуйста как именно, ибо метод shift() похоже не действует - array._leight не уменьшается((

Division 10.09.2008 16:31

Ну значит самый простой для понимания способ:
Допустим у тебя нужно удалить i-й элемент массива arr.
Делаешь так:
Код:

arr[i]=arr[arr.length-1];
arr.pop();


darkvam 11.09.2008 08:34

Division
при этом, если в коде есть функция типа:

Код:

for (var a = 0; a<Arraster.length; a++) {
                Arraster[a]._y += 3;
                if (Arraster[a]._y>=210) {
                        points -= 20;
                        _root.panel.pointsnum.text = points;
                        _root.panel.pointsnum.replaceText();
                        Arraster[a].unloadMovie();
                        Arraster[a].removeMovieClip();
                        Arraster[a].pop();
                }
}

то в этом случае получается, что points -= 20; будет работать каждый кадр, тоесть массив будет считать Arraster[a] предыдущий за удалённым из массива элемент. тоесть получается нескончаемый цикл. мне же нужно чтобы points -= 20; было одинарным действием которое происходит после положительного ответа на ХитТест. почему появляется такая проблемма?


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

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