Форум 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=102113)

AlexeiSulga 09.10.2007 12:57

Как вызвать метод объекта из другого объекта?
 
Не получается обратиться к объекту в parent.

Document class
Код:

package {
        import flash.display.Sprite;
       
        public class myRoot extends Sprite{
                public function myRoot(){
                        var objA:aClass = new aClass();
                        objA.name="objA";
                        addChild(objA);
                        var objB:bClass = new bClass();
                        objB.name="objB";
                        addChild(objB);
                }
        }
}

aClass.as
Код:

package {
        import flash.display.Sprite;
       
        public class aClass extends Sprite{
                var myProperty:Object = "A";
                public function aClass(){
                        trace("A_object = " + myProperty);
                }
                public function changeParam(newData:String){
                        trace("A.myProperty = "+ newData);                       
                }
        }
}

bClass.as
Код:

package {
        import flash.display.Sprite;
       
        public class bClass extends Sprite{
                var myProperty:String = "B";
                public function bClass(){
                        parent.getChildAt(0).changeParam(myProperty);
                }
        }
}

В этой строке вся загвоздка: parent.getChildAt(0).changeParam(myProperty);
что я неправильно делаю?

etc 09.10.2007 13:01

Неправильно называете классы. Для начала.
А во-вторых, у DisplayObject нет метода changeParam. Необходимо привести полученный спрайт к aClass, т.е. сделать кастинг.

AlexeiSulga 09.10.2007 13:29

__etc, спасибо... Про названия классов я вкурсе. Essential ActionScript 3.0 уже в пути с амазона.

Сам я дизайнер, пытаюсь перейти с AS1 на AS3. До изучения кастинга еще не дошел. Проблема в том, что даже trace(parent.getChildAt(0)); возврашает null

etc 09.10.2007 13:33

А потому что на момент вызова конструктора, parent ещё не обозначен.
addChild происходит позже.

2morrowMan 09.10.2007 17:01

Чтобы было понятней:
ты делаешь:
var objB:bClass = new bClass(); <-- вызываеться конструктор bClass().
В этом конструкторе ты делаешь:
parent.getChildAt(0).changeParam(myProperty);
но parent появляеться только тогда, когда ты делаешь:
addChild(objB);

AlexeiSulga 09.10.2007 23:38

Тоесть получается что при компиляции swf сперва обрабатываются конструкторы всех классов, а только потом появляется display object. Не подскажите где в хелпе об этом можно подробнее прочитать?

etc 09.10.2007 23:41

Конструктор — это функция. Она выполняется, когда вы пишете new. После её выполнения уже происходит дальнейшее выполнение кода, appendChild и т.д.


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

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