as3 доступ к Children из динамически добавленного видеоклипа

Я добавляю moiveClips и соответственно указываю их положение. Я помещаю все динамически добавленные клипы в один новый клип, а затем центрирую его на сцене. В качестве теста я вижу, что могу управлять альфой в основном контейнере, но не могу получить доступ к дочерним элементам. Как я могу оценить каждый flagButton отдельно? В этом примере цикла ниже их будет несколько.

var flagButton:MovieClip;
var flagArray:Array = new Array;
var flagDisplayButtons:MovieClip = new MovieClip();
function displayFlagButtons()
{




for( var i = 0; flagArray.length > i; i++)
{
    var flagButton:MovieClip = new roundButton();
    flagButton.x = (flagButton.width + 10) * i;
    flagButton.y = stage.stageHeight - flagButton.height;
    addChild(flagButton);

    flagDisplayButtons.addChild(flagButton);
}
addChild(flagDisplayButtons);

// Works
flagDisplayButtons.x = stage.stageWidth/2 - flagDisplayButtons.width/2;

// Does not see flagButton
flagDisplayButtons.flagButton.alpha = .5;
}

ПОЛУЧАЕТ ОШИБКУ: TypeError: Ошибка № 1010: термин не определен и не имеет свойств.


person Papa De Beau    schedule 02.05.2013    source источник


Ответы (2)


В вашем примере кода вы создали кучу экземпляров кнопок и один за другим добавили их в список отображения flagDisplayButtons. Они находятся в этом списке отображения в том порядке, в котором вы их разместили.

первый экземпляр находится в индексе 0

второй экземпляр находится в индексе 1

третий экземпляр находится в индексе 2

и так далее.

Итак, если вы хотите получить доступ к третьей добавленной вами кнопке, вы можете сделать это:

var flagButton:RoundButton = flagDisplayButtons.getChildAt(2) as RoundButton;

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

flagButton.alpha = .5;
flagButton.x = 100;
flagButton.y = 200;
person prototypical    schedule 02.05.2013
comment
Это именно то, что мне было нужно, потому что мне нужно было получить доступ к mc внутри класса с именем tButton. Теперь он работает с вашим примером var. flagButton.tButton.visible = истина. Потрясающий! :) - person Papa De Beau; 03.05.2013
comment
На самом деле я исправляюсь. Это не сработает сейчас. Я изменил имя mc в классе roundButton и теперь пытаюсь сделать видимым дочерний элемент flagButton, но он не работает. Он видит flagButton, и я могу контролировать его альфу, но не могу получить доступ к дочернему элементу. Это потому что я обновил мк? - person Papa De Beau; 03.05.2013
comment
Мне нужно увидеть ваш класс RoundButton. Вы должны понимать, что если это не общедоступное свойство/метод, оно недоступно в экземпляре этого класса. Скорее всего проблема в этом. - person prototypical; 03.05.2013
comment
Кроме того, если что-то не работает сейчас, это действительно новый вопрос. Похоже, у вас возникла проблема с пониманием общедоступных/приватных методов/свойств класса. Лучше не создавать новые темы внутри этого вопроса. - person prototypical; 03.05.2013
comment
Класс roundButton создается с помощью экспорта в ActionScript через Adobe Box. Я не трогаю код. То, что я пытаюсь сделать, это сделать кнопки, как на iPhone внизу. Один будет выделен в соответствии со страницей, на которой он находится. Он будет отображаться в соответствии с салфетки. Мне нужно получить доступ ко всем из них. но содержимое динамическое, поэтому мне нужно, чтобы оно было в массиве, где я могу сказать... Если страница 1, то flagButton.myHighlight.visible = true; Например. Итак, как мне получить все это в массиве или получить к ним доступ динамически, а не жестко закодировать? - person Papa De Beau; 03.05.2013
comment
Является ли myHighlight дочерним элементом символа RoundButton в вашей среде IDE? Если это так и он имеет имя экземпляра myHighlight, он будет доступен. Но, опять же, это совсем другая тема. если вы напишете мне по адресу [email protected], я могу помочь вам в чате с некоторыми основными понятиями, которые могут вам помочь. - person prototypical; 03.05.2013

Вам нужно использовать getChildAt или getChildByName, чтобы получить дочерние элементы DisplayObjectContainer

IE:

flagDisplayButtons.getChildAt(0).alpha = 0.5;
person Barış Uşaklı    schedule 02.05.2013
comment
Это помогло мне получить доступ, как я и просил. Спасибо. Мне нужен был еще один уровень, и приведенный выше код помог мне добраться до этого уровня. Большое спасибо за вашу мудрость в кодировании в as3 :) - person Papa De Beau; 03.05.2013