PDA

Просмотр полной версии : Как динамически удалить Components


Xero201
27.07.2009, 12:52
Задача в следующем:
На сцене есть клип _root.attachMovie("clip","clip",1000); В него загружается компонент _root.clip.attachMovie("ComboBox","com1",2100); Все нормально. Но когда клип нужно удалить _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
попробуйте трейс глубины компонента, точно 2100 у него?
Конечно, вот код:
_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 - орлиный глаз!
Но сразу еще вопрос: а как подловить момент, когда это удаление происходит?
Пробовал проследить так:
clip.onUnload = function(){
trace("onUnload");//onUnload
trace("onUnload, clip > "+_root.clip);//onUnload, clip > _level0.clip

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

добавлено..
кстати прикол
clip.onUnload = function(){
id = setInterval(function () {
clearInterval(id);
trace("onUnload, clip > "+_root.clip); //onUnload, clip > undefined
}, 1);
}