2013-05-02 4 views
0

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

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; 
} 

GETS ОШИБКА: TypeError: Ошибка # 1010: Термин не определен и не имеет свойств.

ответ

1

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

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

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

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

и так далее.

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

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

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

flagButton.alpha = .5; 
flagButton.x = 100; 
flagButton.y = 200; 
+0

Это именно то, что мне нужно, потому что мне нужно было получить доступ к mc внутри класса tButton. Теперь он работает с вашим примером var. flagButton.tButton.visible = true. Потрясающие! :) –

+0

На самом деле я стою исправлен. Сейчас это не сработает. Я изменил имя mc в классе roundButton и теперь пытаюсь сделать дочерний элемент flagButton видимым, но не работает. Он видит флагButton, и я могу контролировать его альфа, но не получить доступ к ребенку. Это потому, что я обновил mc? –

+0

Мне нужно было бы увидеть свой класс RoundButton. Вы должны понимать, что если это не общедоступный свойство/метод, он недоступен в экземпляре этого класса. Вероятно, это проблема. – prototypical

1

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

IE:

flagDisplayButtons.getChildAt(0).alpha = 0.5; 
+0

Это помогло мне получить доступ, как я просил. Спасибо. Мне нужен еще один уровень, и код выше помогает мне добраться до этого уровня. Большое вам спасибо за вашу мудрость в кодировании в as3 :) –

Смежные вопросы