Flash AS3 - события от дочерней до родительской шкалы времени - PullRequest
0 голосов
/ 09 сентября 2010

То, что я хотел бы сделать, кажется достаточно простым, но меня смущает тот факт, что я хочу работать с временными рамками Flash, а не с пользовательскими классами, файлами .as, flex и т. Д. Я художник,и код можно использовать только так же, как и мои активы (созданные / анимированные во Flash), поэтому я стараюсь работать на временной шкале.

Я хочу, чтобы сценарий в конце временной шкалы ребенка выполнялсяграфик его родителя.Нечто подобное было бы в конце кадра дочернего элемента, если бы это был настоящий скрипт AS3: this.parent.gotoAndPlay (2);

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

import customClass;if (Boolean = true) {gotoAndPlay (3);} // Ожидание дочернего элемента

в родительском кадре 2:

gotoAndPlay (1);// Это создает дешевый цикл

и на последнем дочернем кадре:

import customClass;Boolean = true // Сообщает родителю, когда выходить из цикла

Это работает, но, очевидно, не лучшим образом ... Мне нужна рекурсия в том же временном интервале, но без стекапереполнение или нумерованные приращения.

Я подозреваю, что ответ лежит на EventListeners, но я не хочу, чтобы вызвать его с помощью MouseClick или Timer, я хочу, чтобы вызвать его так: new EventListener: EventListener (ThatGlobalVarAtTheEndOfYourChildTimelineHasBeenChanged);Затем он будет прогрессировать, когда логическое значение будет изменено на true.

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

Спасибо всем за вашу помощь.

1 Ответ

1 голос
/ 09 сентября 2010

Основная временная шкала может отправлять и прослушивать события и отправлять необходимую информацию соответствующему дочернему элементу.

в дочернем экземпляре вы можете написать.

var dispatcher:MovieClip = this.root as MovieClip;
dispatcher.dispatchEvent( new Event('last frame reached') );

и в основнойвременная шкала

this.addEventListener( "mc1 last frame reached" , eventListener );

function eventListener(event:Event):void
{
   //should return your event name
   trace( event.type );

   //you could use a switch statement to redirect to a specific function

   switch(event.type )
   {
       case "mc1 last frame reached":
          this.instanceName1.instanceName2.gotoAndPlay(n);
          break;

       case "mc2 last frame reached":
          this.instanceName1.instanceName4.gotoAndPlay(n);
          break;

       ///etc...
   }
}

Я бы лично использовал пользовательское событие, в котором я мог бы передать имя экземпляра дочернего элемента и любые свойства, которые мне понадобятся в основной временной шкале для запуска новой функции.Ребенок может отправить событие, но я предпочитаю использовать root в качестве фронт-контроллера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...