почему в коде Actionscript 3.0 при удалении дочернего элемента все еще выполняется код? - PullRequest
0 голосов
/ 26 июля 2011

Я переключаюсь с Actionscript 2.0 на Actionscript 3.0, и мне не хватает нескольких ключевых строк кода. Допустим, у меня была ракета, и когда она покидает экран, в Actionscript 2 я просто использовал бы

removeMovieClip(this);

В Actionscript 3.0 я думаю, что должен использовать

parent.removeChild(this);

Проблема в том, что код все еще выполняется. Например, у меня есть трассировка в кадре 1, а затем этот код в кадре 30. Затем, когда я запускаю программу, она запускает кадр 1, затем объект «исчезает», и затем трассировка происходит снова и когда кадр 30 приходит снова, я получаю TypeError: Ошибка # 1009: не удается получить доступ к свойству или методу пустой ссылки на объект.

Так что я делаю не так? Я правильно не удаляю / etc? Я понимаю, что есть несколько подобных вопросов, но у них, похоже, нет ответов, которые я ищу. Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 26 июля 2011

Удаление экранного объекта с дисплея не уничтожает объект. Вам нужно будет уничтожить объект вручную. Вот иллюстрация добавления и удаления экранных объектов:

var mc:MovieClip = new MovieClip();
addChild(mc);
trace(mc); // traces [Object MovieClip]

removeChild(mc);
trace(mc); // traces [Object MovieClip]

mc = null;
trace(mc); // traces null

Имейте в виду, что установка объекта на «ноль» не обязательно уничтожает его. Если в вашем коде есть прослушиватели событий или ссылки на этот объект, Flash все равно будет держать его в памяти. В этом случае вы захотите создать функцию «уничтожить» для объекта. Эта функция удаляет любую ссылку на объект и удаляет любые прослушиватели событий.

0 голосов
/ 28 июля 2011

Вы должны быть уверены, что к мувиклипу не прикреплены прослушиватели событий.Вы также должны быть уверены, что нет ссылки (в любом массиве или любом другом объекте) на мувиклип.Вы также должны сказать mc = null , чтобы удалить сам мувиклип.

В противном случае FlashPlayer удерживает клип в памяти, и он будет существовать всегда, даже если он уже удален из списка отображения.

0 голосов
/ 26 июля 2011

Код ActionScript будет выполняться до тех пор, пока объект не будет очищен сборщиком мусора. Если вы хотите, чтобы он остановился, вы должны явно остановить то, что вызывает выполнение кода. В мувиклипе это означает вызов myMovieClip.stop(), если вы полагаетесь на событие enterframe, просто удалите прослушиватель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...