Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Удаление мувика самим собой (http://www.flasher.ru/forum/showthread.php?t=112505)

Сайлас 29.05.2008 23:11

Удаление мувика самим собой
 
Возник вопрос в корректности удаления мувиклипа самим собой со сцены.
На фрейме "REMOVE" выполняется какая-то анимация, далее на Х-ном кадре выполняется следующий код:
Код:

stop();
if (parent != null)
  parent.removeChild(this);

С точки зрения AS вроде бы все правильно.
Однако наткнулся на странную проблему: после каждого такого удаления мувик судя по всему продолжает проигрывать какую-то анимацию...
То есть , предположим имеется 20 мувиков на сцене. Они нормально работают, далее они все ремувятся и добавляется 20 новых мувиков. Они начинают тормозить. Если сделать так еще раз, то тормоза будут еще больше. Проблема точно не в выгруженных объектах и т.п., по 2 причинам:
1) Если не делать REMOVE, то все ок
2) Нагрузка в виде сожранной памяти при торможении выглядит в виде ломаной, то есть 300 кб, 600 кб, 300 кб, 600 кб... Если еще раз перегрузить мувики, то будет 300 кб - 900 кб - 300 кб - 600 кб - 900 кб - 300 кб и т.п. То есть судя по всему, почему-то мувики, удалившись со сцены (а кстати при этом я тру всевозможные ссылки на них, но, как я уже сказал, что, получается, что если не тереть и не ремувить, то торможение пропадает), начинают что-то такое вытворять, что сжирают память.

Pow R. Toc H. 30.05.2008 15:52

может попробывать
Код:

stop();
if (parent != null)Х
  parent.removeChild(this);
  delete this;
}


Сайлас 30.05.2008 19:08

delete this?!
Ну он проигнорирует эту строчку и продолжит работать :)

telit 30.05.2008 19:46

Код:

stop();
if (parent != null)
this.parent.removeChild(this);

И ещё если мувики не были аттачены, а сразу были на сцене, то их нельзя програмно удалить.

wvxvw 30.05.2008 20:29

это не правильно логически. объекты не должны сами себя удалять (как следствие - не умеют это делать). removeChild() не удаляет клип, он его убирает со сцены, но клип продолжает существовать. Чтобы именно удалить клип нужно родителю и всем объектам ссылающимся на клип сообщить о том, что его нужно удалить. т.е. предположим, что единственный, кто знает про клип - это его родитель, тогда:
у родителя может быть метод, в котором будет что-то вроде этого:
Код:

public function totallyRemoveChild(mc:DisplayObject):void {
var toBeDeleted:DisplayObject = removeChild(mc);
delete toBeDeleted;
}

Цитата:

И ещё если мувики не были аттачены, а сразу были на сцене, то их нельзя програмно удалить
это с чего вдруг?

D12 30.05.2008 20:39

я удалял так =)
Код:

private function enterFrameHandler(event:Event): void
{
    event.target.y += event.target.height;

    if (event.target.y  > 255)
    {
    event.target.removeEventListener(Event.ENTER_FRAME, enterFrameHandler)
                               
    removeChild(Sprite(event.target));
    }
}

хотя сам толком не знаю удаляются ли они :)


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

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