![]() |
|
||||||||||
|
|||||
|
Регистрация: Jan 2009
Сообщений: 13
|
Для создания эффекта клубов дыма я добавляю мувиклипы, которые сами себя со временем уничтожают (по крайней мере, так задумывалось):
public class smoke extends MovieClip { var disappeartimer:Timer = new Timer(90); public function smoke() { disappeartimer.addEventListener(TimerEvent.TIMER, removesmoke); disappeartimer.start(); } private function removesmoke(event:TimerEvent) { disappeartimer.removeEventListener(TimerEvent.TIMER, removesmoke); MovieClip(parent).removeChild(this); delete this; } } |
|
|||||
|
Регистрация: Jun 2008
Сообщений: 51
|
Остановите таймер и переменной disappeartimer присвойте значение null. "delete this", насколько знаю, несет практически нулевую смысловую нагрузку.
|
|
|||||
|
Регистрация: Jul 2008
Адрес: Украина, Киев
Сообщений: 253
|
Теоретически сборщик мусора должен удалять ваши мувики, если вы не сохраняете на них нигде указатели... но со временем
. Строка delete this избыточна, если экземпляры smoke являются локальными переменными некой функции.Хотя лучше организовать систему, которая будет создавать, контролировать и удалять мувики дыма с родительского клипа. |
|
|||||
|
Регистрация: Jun 2008
Сообщений: 51
|
litebox, работающий таймер не позволит коллектору уничтожить объект. И чем лучше создавать систему, которая будет выполнять все те функции, которые объект и сам прекрасно выполняет? Единственное, с чем вижу потенциальную проблему - самоудаление из Display List'а, которое предполагает, что объект добавлен в оный список. Добавление пары listener'ов на ADDED_TO_STAGE и REMOVED_FROM_STAGE должно решить и эту проблему.
|
|
|||||
|
Регистрация: Jul 2008
Адрес: Украина, Киев
Сообщений: 253
|
Таймер остановить желательно, но не обязательно - главное, что его больше ничего не связывает "с внешним миром".
Дело в том, что если плодить такие мувики "без контроля", тормозить будет в любом случае, т.к. сборщик мусора не будет удалять их на лету, а только когда: а) пройдет определенный интервал времени; б) закончится область памяти, первоначально захваченная плеером. Дым - это по сути система частиц, которой нужно управлять. Таким образом, можно определить, что, например, целевой компьютер выдерживает 30 облачков дыма, и выталкивать из массива старые элементы, замещая новыми - таким образом в кадре никогда не окажется безмерного кол-ва клипов |
|
|||||
|
Регистрация: Jun 2008
Сообщений: 51
|
Ну, если уж на то пошло, частицы лучше вообще не добавлять в дисплей лист, а отрисовывать методом copyPixels из заранее подготовленной спрайтмапы. Это точно будет быстрее.
Далее, выталкивание объекта из массива не гарантирует его немедленного удаления. Коллектор соберет его только тогда, когда произойдут вами же описанные события. |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 13
|
Всем спасибо, остановка таймера действительно помогла =)
|
![]() |
![]() |
Часовой пояс GMT +4, время: 03:55. |
|
|
« Предыдущая тема | Следующая тема » |
|
|