Форум 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)
-   -   Как динамически удалить Components (http://www.flasher.ru/forum/showthread.php?t=127972)

Xero201 27.07.2009 12:52

Как динамически удалить Components
 
Задача в следующем:
На сцене есть клип
Код AS1/AS2:

_root.attachMovie("clip","clip",1000);

В него загружается компонент
Код AS1/AS2:

_root.clip.attachMovie("ComboBox","com1",2100);

Все нормально. Но когда клип нужно удалить
Код AS1/AS2:

_root.clip.removeMovieClip();

Исчезает он только визуально trace(_root.clip) – выводит адрес клипа.
В Хэлпе (ActionScript classes > MovieClip > removeMovieClip (MovieClip.removeMovieClip method) ) примечание: Note: If you are using version 2 components, do not use this method. If you place a version 2 component either on the Stage or in the Library, the getNextHighestDepth() method can sometimes return depth 1048676, which is outside the valid range. If you are using version 2 components, you should always use the version 2 components DepthManager class.
Если я правильно перевел, то это значит, что при вставке Компонента, не следует пользоваться функцией getNextHighestDepth(), т.к. она может назначить глубину, выходящую за допустимые пределы, и removeMovieClip() работать не будет. Но ведь я назначаю глубину обычным присвоением, и все равно не работает.
Там же, был предложен еще один вариант удаления: If you must use getNextHighestDepth() with version 2 components, you can use swapDepths() to assign a valid depth value or use MovieClip.unloadMovie() to remove the contents of the movie clip. Alternatively, you can use the DepthManager class to assign depth values within the valid range.
Но unloadMovie() тоже не помогает.
Подскажите, пожалуйста, как правильно удалить Компонент (или клип с этим компонентом).
PS.
Вставка такого же клипа, на такую же глубину тоже не помогает.

Juice_Green 27.07.2009 13:44

попробуйте трейс глубины компонента, точно 2100 у него?

Xero201 27.07.2009 14:27

Цитата:

Сообщение от Juice_Green (Сообщение 838457)
попробуйте трейс глубины компонента, точно 2100 у него?

Конечно, вот код:
Код AS1/AS2:

_root.attachMovie("clip","clip",1000);
 
add_btn.onPress = function(){//добавить ComboBox
        _root.clip.attachMovie("ComboBox","com1",2100);
        trace("Depth ComboBox > "+_root.clip.com1.getDepth());//Depth ComboBox > 2100
}
 
del_btn.onPress = function(){//удалить клип
trace("_root.clip.getDepth() > "+_root.clip.getDepth());//_root.clip.getDepth() > 1000
trace("_root.clip.com1.getDepth() > "+_root.clip.com1.getDepth());//_root.clip.com1.getDepth() > 2100
_root.clip.removeMovieClip();
trace("AFTER del, ComboBox > "+_root.clip.com1);//AFTER del, ComboBox > _level0.clip.com1
trace("AFTER del, clip > "+_root.clip);//AFTER del, clip > _level0.clip
}


Juice_Green 27.07.2009 14:55

и все таки удаление происходит, только не мгновенно, если еще раз нажать на кнопку del_btn, то значения уже undefined

Xero201 27.07.2009 15:16

Действительно! Juice_Green - орлиный глаз!
Но сразу еще вопрос: а как подловить момент, когда это удаление происходит?
Пробовал проследить так:
Код AS1/AS2:

clip.onUnload = function(){
        trace("onUnload");//onUnload
        trace("onUnload, clip > "+_root.clip);//onUnload, clip > _level0.clip

т.е. даже событие onUnload срабатывает слишком рано (

добавлено..
кстати прикол
Код AS1/AS2:

clip.onUnload = function(){
        id = setInterval(function () {
                clearInterval(id);
                trace("onUnload, clip > "+_root.clip);        //onUnload, clip > undefined
        }, 1);
}



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

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