Невозможно получить доступ к MC через ссылки

Я использовал AS 2 раньше, это мой первый проект AS 3. Мне нужно, чтобы MC динамически добавлялись внутри объектов-контейнеров. После их добавления я не могу получить к ним доступ через прямую ссылку. Я могу сделать это с помощью метода getChildByName(), но это утомительно. Кроме того, я заметил, что экземпляры не отображаются на панели переменных с их заданным именем по ожидаемому родительскому/дочернему пути, но вместо этого все они отображаются с именами переменных импорта под «этим». (в приведенном ниже примере у меня есть «cont» и «mc1», оба отображаются под «this»). Вот мой код:

var cont:Sprite = new Sprite() ; 
cont.name = "Container" ; 
addChild(cont) ; 

var mc1:MovieClip = new MovieClip() ; 
mc1.name="mc" ; 
cont.addChild(mc1) ;

var ref1 = getChildByName("Container") ; 
trace(ref1.name) ;                // returns "Container"
trace(mc1.parent.name) ;          // returns "Container"
var ref = ref1.getChildByName("mc") ; 
ref.x = 100 ;  
trace(ref.x) ;                       // returns 100
trace(ref1.mc1.x ) ;                  // DOES NOT WORK
trace(Container.mc.name) ;           // DOES NOT WORK

Я что-то упускаю ? Почему я не могу получить доступ к своему дочернему MC через Container.mc? Спасибо за помощь, Квентин.


person Quentin    schedule 17.12.2019    source источник


Ответы (1)


По большей части я рассмотрел это здесь: Члены объекта и имена экземпляров.

Чтобы получить доступ к дочерним элементам с помощью синтаксиса записи через точку, вам необходимо объявить эти дочерние элементы как члены объекта-контейнера. Что-то такое:

var C:Sprite = new Sprite;
C.name = "Container";
addChild(C);

// Add it also as a member of current context.
this.co = C;

var M:MovieClip = new MovieClip; 
M.name="InnerMC";
C.addChild(M);

// Add it also as a member of C.
C.mc = M;

trace(this.co.name); // Container
trace(this.co.mc.name); // InnerMC

Еще раз: имена членов отличаются от имен экземпляров. После скрипта выше иерархия вашего списка отображения выглядит следующим образом:

this (name: ?)
    └ co (name: Container)
        └ mc (name: InnerMC)
person Organis    schedule 04.01.2020