Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.05.2008, 23:11
Сайлас вне форума Посмотреть профиль Отправить личное сообщение для Сайлас Найти все сообщения от Сайлас
  № 1  
Ответить с цитированием
Сайлас

Регистрация: Mar 2008
Сообщений: 259
По умолчанию Удаление мувика самим собой

Возник вопрос в корректности удаления мувиклипа самим собой со сцены.
На фрейме "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 кб и т.п. То есть судя по всему, почему-то мувики, удалившись со сцены (а кстати при этом я тру всевозможные ссылки на них, но, как я уже сказал, что, получается, что если не тереть и не ремувить, то торможение пропадает), начинают что-то такое вытворять, что сжирают память.

Старый 30.05.2008, 15:52
Pow R. Toc H. вне форума Посмотреть профиль Отправить личное сообщение для Pow R. Toc H. Найти все сообщения от Pow R. Toc H.
  № 2  
Ответить с цитированием
Pow R. Toc H.

Регистрация: Nov 2006
Сообщений: 176
может попробывать
Код:
stop();
if (parent != null)Х
   parent.removeChild(this);
   delete this;
}

Старый 30.05.2008, 19:08
Сайлас вне форума Посмотреть профиль Отправить личное сообщение для Сайлас Найти все сообщения от Сайлас
  № 3  
Ответить с цитированием
Сайлас

Регистрация: Mar 2008
Сообщений: 259
delete this?!
Ну он проигнорирует эту строчку и продолжит работать

Старый 30.05.2008, 19:46
telit вне форума Посмотреть профиль Отправить личное сообщение для telit Найти все сообщения от telit
  № 4  
Ответить с цитированием
telit
 
Аватар для telit

Регистрация: Jul 2007
Сообщений: 306
Код:
stop();
if (parent != null)
this.parent.removeChild(this);
И ещё если мувики не были аттачены, а сразу были на сцене, то их нельзя програмно удалить.


Последний раз редактировалось telit; 30.05.2008 в 19:49.
Старый 30.05.2008, 20:29
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 5  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
это не правильно логически. объекты не должны сами себя удалять (как следствие - не умеют это делать). removeChild() не удаляет клип, он его убирает со сцены, но клип продолжает существовать. Чтобы именно удалить клип нужно родителю и всем объектам ссылающимся на клип сообщить о том, что его нужно удалить. т.е. предположим, что единственный, кто знает про клип - это его родитель, тогда:
у родителя может быть метод, в котором будет что-то вроде этого:
Код:
public function totallyRemoveChild(mc:DisplayObject):void {
var toBeDeleted:DisplayObject = removeChild(mc);
delete toBeDeleted;
}
Цитата:
И ещё если мувики не были аттачены, а сразу были на сцене, то их нельзя програмно удалить
это с чего вдруг?
__________________
Hell is the possibility of sanity

Старый 30.05.2008, 20:39
D12 вне форума Посмотреть профиль Отправить личное сообщение для D12 Найти все сообщения от D12
  № 6  
Ответить с цитированием
D12
меценат
 
Аватар для D12

блогер
Регистрация: Jan 2004
Адрес: D
Сообщений: 1,592
Записей в блоге: 2
я удалял так =)
Код:
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, время: 05:43.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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