Просмотр полной версии : вопрос по destroyObject
Создаю RadioButton'ы в руте:
rb_d[i]=_root.createClassObject(mx.controls.RadioButton, "rb"+i, i+100, {_x:395,_y:y2,groupName:"g1"});
Потом по нажатии на кнопку должно происходить удаление:
destroyObject(rb_d[i]);
Но не происходит.
Идиотский вопрос - почему? Depth трейсил - неотрицательный.
Потому что i у тебя неправильный.
? В смысле?
i - переменная цикла, положительная. Какой она тогда должна быть?
Стандартные грабли начинающего программера, который полагает, что если он счетчик i написал внутри какой-то функции, объявленной в цикле, то этот самый счетчик i внутри этой функции будет заморожен и иметь значение, равное тому, что было в момент создания функции. Это на самом деле не так, значение i будет равно тому, которое будет после выполнения цикла (т.е. равен n при схеме i<n). Выходом обычно является присвоение объекту в цикле переменной, содержащее текущее значение i, а внутри функции использовать эту переменную.
Код приводить не буду, на эти граблы наступает куча человек и лучше вникнуть и написать код самостоятельно.
Не, там нет функции. Два независимых цикла откручиваются от 0 до n.
Просто после нажатия на кнопку я прокручиваю массив rb_d и пытаюсь удалить объекты. Т.е. i меняется как ей и положено.
Хотя сейчас попробую.
Это первый цикл, в котором создаются мувики и соответствующие им радиобаттоны:
l=category1[0].length;
asd=Array(l);
rb_d=Array(l);
for(i=0;i<l;i++){
y1=274+30*i;
y2=283+30*i;
asd[i]=_root.attachMovie("as", "as"+i, i+1,{_x:400,_y:y1});
rb_d[i]=_root.createClassObject(mx.controls.RadioButton, "rb"+i, i+100, {_x:395,_y:y2,groupName:"g1"});
trace(rb_d[i]);
_root.asd[i].part.text=category1[0][i].parts;
_root.asd[i].item.text=category1[0][i].platform;
}
Это второй цикл, который отрабатывается после нажатия на кнопку, удаляя созданные объекты:
on (release){
l=category1[0].length;
for(j=0;j<l;j++){
_root.asd[j].removeMovieClip();
trace(rb_d[j]);
trace(rb_d[j].getDepth());
destroyObject(_root.rb_d[j]);
_root.rb_d[j].destroyObject();
}
}
Причем _root.asd[j].removeMovieClip(); - отрабатыват нормально.
Да, ещё один момент — в destroyObject нужно передавать не ссылку на удаляемый объект, а имя этого объекта.
on (release){
l=category1[0].length;
for(j=0;j<l;j++){
var o = _root.rb_d[j];
_root.destroyObject(o._name);
}
}
Да, и приведи в порядок имена переменных.
Сенькс, заработало. Видимо я невнимательно хелп читал.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.