Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Почему дочерний мувик не получает переменную? (http://www.flasher.ru/forum/showthread.php?t=130001)

Tr1te 15.09.2009 18:42

Почему дочерний мувик не получает переменную?
 
Есть главная функция Main, которая создает дочерний мувик MainLayer и передает туда переменную:
Код AS3:

        public class Main extends MovieClip {
 
                var MainVar:Number=241;
                var MainLayer_Provider:MainLayer;
 
                function Main():void {
                        MainLayer_Provider=new MainLayer  ;
                        MainLayer_Provider.Provider_Var(MainVar);
                        addChild(MainLayer_Provider);
                }
        }//class

А в классе дочернего мувика я пытаюсь эту переменную затрэйсить:
Код AS3:

        public class MainLayer extends MovieClip {
 
                var MainVar:Number;
 
                function MainLayer():void {
                        trace(MainVar);
                }
                function Provider_Var(PV_Var):void {
                        MainVar=PV_Var;
                }
        }//class

Но у меня ничего не выходит, он трэйсит NaN. Помогите, пожалуйста, решить проблему.

Партизан 15.09.2009 18:55

trace в конструкторе... а значение вы передаете в Provider_Var
совсем не удивительно что на тот момент ваша переменная NaN

Tr1te 15.09.2009 19:22

А как правильно? То что для вас не удивительно, для меня удивительно. Смысл писать сообщение, которое ничего не объясняет?
Ведь я обращаюсь к конструктору после того как передал переменную.

WRC_S 15.09.2009 19:51

попробуй так :

Код AS3:

public class MainLayer extends MovieClip {
 
                var MainVar:Number;
 
                function MainLayer():void {
 
                }
                public function Provider_Var(PV_Var):void {
                        MainVar=PV_Var;
                        trace(MainVar);
 
                }
        }//class

или
в родителе вызвать
Код AS3:

MainLayer_Provider=new MainLayer(MainVar)  ;

в дочернем принять
Код AS3:

public class MainLayer extends MovieClip {
 
                var MainVar:Number;
 
                function MainLayer(PV_Var:Number):void {
MainVar=PV_Var;
                        trace(MainVar);
                }
        }//class

Добавлено через 3 минуты
Должно всё работать

Партизан 15.09.2009 20:01

Код AS3:

        public class MainLayer extends MovieClip {
 
                var MainVar:Number;
 
                function MainLayer():void {
                //Конструктор
                // Вызывается при создании экземпляра
                // этой строчкой MainLayer_Provider=new MainLayer()  ;
 
                        trace(MainVar);//trace возвращает здесь NaN
                // потому что значение MainVar  вы присваиваете позже.
                // потому вас совсем не должно это удивлять
                }
 
                // вот этой строчкой MainLayer_Provider.Provider_Var(MainVar);
                // вы вызываете эту функцию и присваиваете тем самым
                // значение переменной.
                function Provider_Var(PV_Var):void {
                        MainVar=PV_Var;
                // trace(MainVar) нужно ставить здесь.
                }
        }//class


WRC_S 15.09.2009 20:08

Цитата:

Сообщение от Tr1te (Сообщение 851049)
А как правильно? То что для вас не удивительно, для меня удивительно. Смысл писать сообщение, которое ничего не объясняет?
Ведь я обращаюсь к конструктору после того как передал переменную.

ты уже вызвал конструктор до передачи переменной создав его MainLayer_Provider=new MainLayer;

а addChild(MainLayer_Provider); ты не вызываешь конструктор, а просто дабавляешь уже готовый класс на сцену!!!

Tr1te 15.09.2009 20:18

Теперь понятно, спасибо.
Но как быть если нужно чтобы в главном классе создавалась переменная, потом передавалась в дочерний мувик, и в конструкторе дочернего мувика эта переменная использовалась. Например трэйсилась.

WRC_S 15.09.2009 20:24

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

Партизан 15.09.2009 20:28

Цитата:

Сообщение от Tr1te (Сообщение 851081)
Например трэйсилась.

Код AS3:

public class MainLayer extends MovieClip {
 
                var MainVar:Number;
 
                function MainLayer(val:Number):void {
                        MainVar = val
                        trace(MainVar);
                    }
 
        }//class
 
    // В главном классе MainLayer_Provider=new MainLayer(MainVar);


WRC_S 15.09.2009 20:34

я иму такую штуку приводил, ему походу надо, сначало создать класс а потом когданибудь когда в главном класе созреет переменнай уже пихнуть в дочерний класс, а не сразу при создании как я понял от него!


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

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