PDA

Просмотр полной версии : не работает функция removeMovieClip


GalyaK
28.03.2008, 11:50
Добрый день! уже второй день пытаюсь "заставить" флеш удалить мувики,созданные при помощи attachMovie, но они по-прежнему на своих местах...
Здесь они создаются:

main_mc=_root.createEmptyMovieClip("menu_mc", 0);

function create_menu(menu_xml) {
var mc;
var i = 0;
var nod = menu_xml[i];
while (nod) {
i++;
nod = menu_xml[i];
mc = main_mc.attachMovie(nod.attributes.klass, "m"+i+"_mc", i);
nod.attributes.mc = mc;
mc.i = i;
}
};

а здесь я пытаюсь их удалить-чтобы их не было на экране:

function clear_window (my_xml){
var node=my_xml.firstChild;
while(node){
for (l=0;node.childNodes[l];l++){
removeMovieClip(node.childNodes[l].attributes.mc);
}
node=node.nextNode();
}
}

трейсом проверяю ссылки на клипы-вроде бы все они прописаны в соответствующем атрибуте узла xml, но тем не менее они не удаляются, в чем может быть ошибка?

Obi
28.03.2008, 12:16
main_mc=_root.createEmptyMovieClip("menu_mc", 0);
var mcArray:Array = new Array();
function create_menu(menu_xml):Void {
var mc;
var i = 0;
var nod = menu_xml[i];
while (nod) {
i++;
nod = menu_xml[i];
mc = main_mc.attachMovie(nod.attributes.klass, "m"+i+"_mc", i);
mcArray.push(mc);
mc.i = i;
}
};


function clear_window ():Void{
for(var i:Number = 0; i < mcArray.length; i++) {
removeMovieClip(mcArray[i]);
mcArray.splice(i, 1)
}
}

iNils
28.03.2008, 12:19
node.childNodes[l].attributes.mc - это строковое значение, а не ссылка на клип.

GalyaK
28.03.2008, 23:42
node.childNodes[l].attributes.mc - это строковое значение, а не ссылка на клип.
а как же в таком случае получить или сохранить ссылку на клип? ведь свойства _target и name тоже не катят

2 Obi: спасибо, но вариант с массивом тоже не работает

Molecula
28.03.2008, 23:48
mc - у Вас и была ссылка, всё правильно, но Вы же объвили её в пределах функции, т.е. она Локальная. Маша не видит Сашу, бо они в разных городах.
Так надо удалять:
removeMovieClip(mc);

Obi предложил удалять с помощью массива, который набит ссылками на мувики. Массив виден из любой функции, так что - тут нет проблем.

GalyaK
29.03.2008, 00:08
да-да,спасибо, Molecula, я уже поняла, что массив набит ссылками, вот только мой flash mx этого не догнал: в массиве удаляет сами элементы функцией split как-то криво: перескакивает через некоторые и идут они там не по порядку. а клипы как висели, так и висят-они почему-то не хотят удаляться. ладно, буду тестить снова и снова, спасибо за помощь

Molecula
29.03.2008, 00:14
Причем тут split ?.. эти вещи касаются массивов, а не мувиклипов.
removeMovieClip(mcArray[i])
Удалит тот мувиклип, на который ссылается элемент массива.

GalyaK
02.04.2008, 12:51
и действительно,причем тут split, когда это вовсе даже и splice) но в коде у меня правильно написано. я про то что ссылки на мувиклипы из массива не удаляются.
и
removeMovieClip(mcArray[i])
не удаляет нужный мувиклип

crc
02.04.2008, 13:18
removeMovieClip(main_mc["m"+ i +"_mc"]);