| firefedot |
04.06.2014 10:28 |
Функция выводит trace, но не удалеят объект
Доброе...
Ситуация патовая)
Есть функция, которая при выборе ответа на radiobutton должна закрыть окно. Но окно не закрывается и ни каких ошибок нет, трейсы выводятся.
Вот так создаю радиокнопки:
Код AS3:
public var conteinerVopros:MovieClip = new MovieClip();
public var rbg1_1:RadioButtonGroup = new RadioButtonGroup("radioGroup2");
public var rb1_1:RadioButton = new RadioButton();
public var rb2_1:RadioButton = new RadioButton();
public var rb3_1:RadioButton = new RadioButton();
public var rb4_1:RadioButton = new RadioButton();
Так их вызываю:
Код AS3:
rb1_1.group = rbg1_1;
rb2_1.group = rbg1_1;
rb3_1.group = rbg1_1;
rb4_1.group = rbg1_1;
rb1_1.move(350,350);
rb2_1.move(350,400);
rb3_1.move(350,450);
rb4_1.move(350,500);
Вот момент вызова, при столкновении
Код AS3:
if(sunduk_1_0){
if(hero_1.hitTestObject(sunduk_1_0)){
sunduk_1_0.gotoAndStop("open");
addChild(conteinerVopros);
conteinerVopros.addChild(afterlvl_2);
vopros_end.setError("Вопрос",150,180);
conteinerVopros.addChild(vopros_end);
rb1_1.label="Горы";
rb2_1.label="Сады";
rb3_1.label="Озера";
rb4_1.label="Заводы";
rb1_1.value=1;
rb2_1.value=2;
rb3_1.value=3;
rb4_1.value=4;
rb1_1.move(180,250);
rb2_1.move(180,280);
rb3_1.move(180,310);
rb4_1.move(180,340);
rb1_1.width=400;
rb2_1.width=400;
rb3_1.width=400;
rb4_1.width=400;
conteinerVopros.addChild(rb1_1);
conteinerVopros.addChild(rb2_1);
conteinerVopros.addChild(rb3_1);
conteinerVopros.addChild(rb4_1);
rb1_1.addEventListener(MouseEvent.CLICK, radioTest_2);
rb2_1.addEventListener(MouseEvent.CLICK, radioTest_2);
rb3_1.addEventListener(MouseEvent.CLICK, radioTest_2);
rb4_1.addEventListener(MouseEvent.CLICK, radioTest_2);
}
}
Вот функция radioTest_2:
Код AS3:
function radioTest_2(event:MouseEvent):void{
var rb_0:RadioButton = event.target as RadioButton;
trace(rb_0.value);
if(rb_0.value==1){
bal_1+=50;
vopros_end.setError("Вы правильно ответили на вопрос",150,210);
trace("Верно");
//stage.removeChild(conteinerVopros);
if (conteinerVopros.parent) {
conteinerVopros.parent.removeChild(conteinerVopros);
}
После этого трейсы выводятся, а сам объект не удаляется. Пробовал отдельно удалять радиокнопки, тоже тишина. Ошибок нет, просто трейсы и все.
В чем может быть дело?
А вот если тоже самое использовать на другом объекте, то все работает.
Вот пример рабочего момента в том же приложении:
Код AS3:
if(kassa_end){
if (hero_1.hitTestObject(kassa_end)){
trace("Уровень пройден.");
addChild(afterlvl_1);
vopros_end.setError("Что такое?",150,210);
addChild(vopros_end);
rb1.label="α-гипса и β-гипса";
rb2.label="природный материал";
rb3.label="CaSO 4 + 2Н 2 O";
rb4.label="нерастворимый в спирте";
rb1.value=1;
rb2.value=2;
rb3.value=3;
rb4.value=4;
rb1.move(180,250);
rb2.move(180,280);
rb3.move(180,310);
rb4.move(180,340);
rb1.width=400;
rb2.width=400;
rb3.width=400;
rb4.width=400;
addChild(rb1);
addChild(rb2);
addChild(rb3);
addChild(rb4);
rb1.addEventListener(MouseEvent.CLICK, radioTest_1);
rb2.addEventListener(MouseEvent.CLICK, radioTest_1);
rb3.addEventListener(MouseEvent.CLICK, radioTest_1);
rb4.addEventListener(MouseEvent.CLICK, radioTest_1);
count=0;
bal_1=0;
timer.stop();
timer.reset();
time_field.text="0:00";
}
}
...
function radioTest_1(event:MouseEvent):void{
var rb:RadioButton = event.target as RadioButton;
trace(rb.value);
if(rb.value==1){
trace("Верно");
container_lvl_1.removeChild(kassa_end);
kassa_end=null;
bal_1+=200;
if(bal_1>max_bal_lvl_1){
max_bal_lvl_1=bal_1;
max_bal_1.setMaxBal(max_bal_lvl_1+"/380",160,80);
removeEventListener(Event.ENTER_FRAME, speedPers);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, downPers);
stage.removeEventListener(KeyboardEvent.KEY_UP, upPers);
container_lvl_1.removeChild(hero_1);
hero_1=null;
vopros_end.setError("Вы правильно ответили на вопрос, а так же набрали "+max_bal_lvl_1+" балов",150,210);
removeChild(rb1);
removeChild(rb2);
removeChild(rb3);
removeChild(rb4);
afterlvl_1.close_afterlvl.addEventListener(MouseEvent.CLICK, goodLVL);
} else {trace(bal_1+"<"+max_bal_lvl_1);}
}else {
trace("Не верно");
container_lvl_1.removeChild(kassa_end);
kassa_end=null;
removeEventListener(Event.ENTER_FRAME, speedPers);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, downPers);
stage.removeEventListener(KeyboardEvent.KEY_UP, upPers);
container_lvl_1.removeChild(hero_1);
hero_1=null;
vopros_end.setError("Вы неверно ответили на вопрос, попробуйте испытать свои силы еще раз.",150,210);
removeChild(rb1);
removeChild(rb2);
removeChild(rb3);
removeChild(rb4);
afterlvl_1.close_afterlvl.addEventListener(MouseEvent.CLICK, fatalLVL);
}
}
function fatalLVL(event:MouseEvent):void{
removeChild(afterlvl_1);
removeChild(container_lvl_1);
afterlvl_1.close_afterlvl.removeEventListener(MouseEvent.CLICK, fatalLVL);
addChild(game_menu);
}
function goodLVL(event:MouseEvent):void{
removeChild(afterlvl_1);
removeChild(container_lvl_1);
afterlvl_1.close_afterlvl.removeEventListener(MouseEvent.CLICK, fatalLVL);
addChild(game_menu);
game_menu.addChild(gotovo);
}
В рабочем варианте у меня все полностью удаляется, а тут надо вывести на экран, потом его удалить, до окончания уровня.
Спасибо.
Добавлено через 9 минут
А если же делаю так:
Код AS3:
conteinerVopros.visible=false;
То он естественно исчезает, но пропадает функционал)
То есть у меня перестает все реагировать на клавиатуру.
Добавлено через 12 минут
stage.focus = stage;
выручил)
Тогда вопрос, то что не удалил, а просто скрыл объект, это же плохо?)
Правда я его еще буду использовать минимум 8 раз...
|