Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Функция выводит trace, но не удалеят объект (http://www.flasher.ru/forum/showthread.php?t=208113)

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 раз...

LifeIsRhythm 04.06.2014 13:06

Вы так давно изучаете flash, что пора уже перейти в классы!
Вам и самому легче будет и всякие мелочные ошибки пропадут, ну и на Ваши вопросы ответы,
ответы будете получать быстрей.
Ну а так фиг его знает где ошибка, по коду её не видно. И почитайте о циклах, рулоны кода это плохо!

firefedot 06.06.2014 15:17

я в классах пишу, нет ни одного символа в кадрах)
а ошибку нашел..

LifeIsRhythm 06.06.2014 15:23

А почему нет модификаторов доступа у методов? Ведь компилятор должен предупреждения писать.
Или у Вас не строгий режим включен?

Wolsh 06.06.2014 16:23

Может, он просто тут же выскакивает обратно? У Вас "момент вызова" случайно не на ентерфрейм завязан? А то ведь сундук-то никуда не делся, и хиттест опять сработает.
Так же порадовал вывод сообщений о результатах в контейнер, который тут же удаляется... и кому их читать? //conteinerVopros.addChild(vopros_end);

in4core 06.06.2014 20:15

Цитата:

А почему нет модификаторов доступа у методов? Ведь компилятор должен предупреждения писать.
Автоматически будет internal. Так что можно не писать. Но это не ООП конечно же тогда)) А так ругаться не будет в любом случае

LifeIsRhythm 06.06.2014 20:24

Цитата:

А так ругаться не будет в любом случае
У меня FD предупреждает и в output и в result -
Цитата:

Warning: function 'test' will be scoped to the default namespace: Pool: internal. It will not be visible outside of this package.


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

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