Показать сообщение отдельно
Старый 08.12.2006, 13:26
yana_flash вне форума Посмотреть профиль Отправить личное сообщение для yana_flash Найти все сообщения от yana_flash
  № 1  
Ответить с цитированием
yana_flash

Регистрация: Oct 2003
Сообщений: 74
По умолчанию Изменение State из ActionScript'а

Второй день безуспешно рою документацию по Flex2 и AS3, чтобы решить следующую задачу. В разделе "Lessons" help'а есть пример "Use View States and Transitions". Этот пример показывает, как анимировать переход из одного состояние (state) программы в другое (из base в Advanced). При переходе в Advanced анимируется появление на экране дополнительных элементов интерфейса. Это делается с помощью создания Transition: <mx:Transition id="myTransition" fromState="*" toState="Advanced">.

В качестве задачки для освоения Flex я решила при обратном переходе (из Advanced в base) точно также анимированно спрятять появившиеся дополнительные элементы. Решить задачу c помощью создания еще одной Transition не удалось - как я понимаю, при переходе от одного состояния к другому смена состояния осуществляется в первую очередь - и только потом выполняются прописанные в Transition действия.

Видимо, в состоянии Advanced нужно заменить в <mx:SetEventHandler target="{linkbutton1}" name="click" handler="currentState=''"/> параметр handler с "currentState=''" на вызов процедуры, которая сначала анимированно уберет с экрана "лишние" элементы интерфейса, и лишь затем поменяет currentState на base. Если я правильно понимаю, для этого можно попробовать использовать следующую конструкцию:

Код:
<mx:Script>
    <![CDATA[
    public function changeStateFromAdvancedToBase():void {
        ???
    }
    ]]>
</mx:Script>

<mx:State name="Advanced">
...
	<mx:SetEventHandler target="{linkbutton1}" name="click" handler="changeStateFromAdvancedToBase()"/>
</mx:State>
И тут возникают следующие вопросы:

Вопрос 1:
В MXML я могла бы задать анимированное исчезновение, например, так:
Код:
<mx:Parallel target="{myVBox}">
	<mx:WipeUp duration="2000"/>
	<mx:Dissolve alphaFrom="1.0" alphaTo="0.0" duration="2000"/>
</mx:Parallel>
Как реализовать аналогичное действо из AS3?

Вопрос 2:
Как в AS3 заставить программу перейти в новое состояние? В help'е описан класс State - но в его описании я не нашла способа сделать конкретный State текущим. В классе Application я также не нашла ни способа найти возможные State'ы Application'а, ни способа определить или поменять currentState.