Доступ к дочерним элементам SimpleButton

У меня есть файл Flash .fla с SimpleButton. Этот SimpleButton в основном представляет собой форму, похожую на кнопку, со значком на ней (скажем, это символ «пауза»). Я хочу программно изменить цвет этого значка, но не могу получить к нему доступ из AS.

Я выбрал значок, «преобразовал в символ» и дал ему имя экземпляра. Это работало для большинства других вещей, к которым я хотел получить доступ, но не для этой цели. Я искал его в отладчике, но просто не могу получить доступ к объекту.

Итак, как это сделать?


person Sietse    schedule 07.07.2009    source источник
comment
Теперь я обнаружил, что когда я делаю кнопку мувиклипом, а не кнопкой, я могу получить доступ к дочернему мувиклипу. Однако это заставляет мою кнопку мигать всеми своими состояниями снова и снова. Думаю, это не выход.   -  person Sietse    schedule 07.07.2009
comment
Да, вам понадобится MovieClip.Stop(), чтобы предотвратить это. Но если вы получите состояния, как в моем ответе, вы все равно можете получить детей. Вам просто нужно преобразовать состояние в DisplayObjectContainer.   -  person Jacob Poul Richardt    schedule 07.07.2009


Ответы (2)


Если вы ищете состояния кнопки, вы можете найти их здесь: SimpleButton.upState, SimpleButton.overState, SimpleButton.downState.

Вы можете изменить цвет, манипулируя coulorTransform свойства transform. См. здесь: http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/geom/ColorTransform.html

РЕДАКТИРОВАТЬ: Чтобы изменить только цвет фона, лучшим решением было бы просто иметь фон как DisplayObject, содержащийся в состояниях, а затем изменить его. Но вам придется прослушивать изменения состояния, чтобы сохранить изменения цвета.

В качестве альтернативы вы можете найти компонент, который сделает именно это, если ваши потребности достаточно общие.

person Jacob Poul Richardt    schedule 07.07.2009
comment
Да, я нашел все это, и это работает. Но, к сожалению, они не позволяют мне изменить только часть кнопки. - person Sietse; 07.07.2009
comment
Хорошо, я обновил свой ответ. Но на самом деле нет простого способа сделать это. - person Jacob Poul Richardt; 07.07.2009

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

person Jesse    schedule 21.07.2009
comment
Я тоже работаю над чем-то вроде этого, и это не быстрый маленький класс. Встроенный SimpleButton обрабатывает множество пограничных случаев, которые легко пропустить в вашем собственном коде. - person scobi; 22.10.2009