Flash AS3 - дождитесь завершения MovieClip - PullRequest
2 голосов
/ 25 октября 2010

Я пишу некоторый код, который (я думаю) требует последовательного воспроизведения объектов MovieClip.Я хотел бы иметь возможность оставить это в одном кадре и использовать только внешние исходные файлы.

Я хочу использовать это для переключения между разделами моей программы.

удалить текущий дочерний элемент
создать мувиклип
добавить нового дочернего элемента
дождаться завершения создания нового дочернего элемента и перейти к следующему шагу

Является ли это возможным?: Кроме метода ENTER_FRAME.Запуск обработчика каждого кадра кажется расточительным, когда сигнал наверняка может быть отправлен, когда клип достигает своего последнего кадра.

Ответы [ 4 ]

6 голосов
/ 25 октября 2010

Вы можете использовать метод addFrameScript.

http://www.kirupa.com/forum/showpost.php?p=2098268&postcount=318

MovieClip.addFrameScript(frame:int, method:Function, [frame:int, method:Function...]):void;

Примерно так:

// This will be called on the last frame.
function myfunc():void{
    // Do stuff
}
// ** The frame number is zero-based.
myclip.addFrameScript(myclip.totalFrames-1, myfunc);
1 голос
/ 25 октября 2010

или вы можете отправить какое-то событие в нужном кадре следующим образом:

// In (frame 15 of 250):
super.dispatchEvent(new Event("CUSTOM_EVENT_TYPE", true));

//In as file:
_myClip.addEventListener("CUSTOM_EVENT_TYPE", onCustomListener); 
... 
private function onCustomListener(event : Event) : void {
    event.stopImmediatePropagation(); 
    //your staff 
}
1 голос
/ 25 октября 2010

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

Кажется, проще и масштабируемее реализовать метод, который будет работать с любым загруженным MovieClip. В этом примере вы бы задали переменную allMovies как массив, который будет содержать все ваши мувиклипы и целое число movieIndex.

 function loadMovieClip(mc:MovieClip):void
 {
     mc.addEventListener(Event.ENTER_FRAME , enterFrameListener );
     addChild( mc);
 }

 function enterFrameListener(event:Event):void
 {
      var mc:MovieClip = event.currentTarget as MovieClip;

      if( mc.currentFrame == mc.totalFrames )
      {
           mc.removeEventListener(Event.ENTER_FRAME , enterFrameListener );
           removeChild(mc);

           ++movieIndex;

           if( movieIndex < allMovies.length )
             loadMovieClip(allMovies[movieIndex] );
      }
  }
1 голос
/ 25 октября 2010

Найдите свойства currentframe и totalframes MovieClip для liveocs, используйте их для проверки события ENTER_FRAME, когда активный видеоклип все еще воспроизводится или завершился.

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