2009-03-25 2 views
1

у меня есть прелоадер в моем гибком применении:Слушайте события из прелоадер в гибких

public class Preloader extends DownloadProgressBar 
{ 

    private var _preloader:PreloaderAnimation; 

    public function Preloader() 
    { 
     super(); 

     _preloader = new PreloaderAnimation; 
     addChild(_preloader); 
    } 

    public override function set preloader(preloader:Sprite):void 
    {     
     preloader.addEventListener(ProgressEvent.PROGRESS , onSWFDownloadProgress); 
     preloader.addEventListener(Event.COMPLETE   , onSWFDownloadComplete); 
     preloader.addEventListener(FlexEvent.INIT_PROGRESS , onFlexInitProgress ); 
     preloader.addEventListener(FlexEvent.INIT_COMPLETE , onFlexInitComplete ); 
    } 

    ......... 

    private function onFlexInitComplete(event:FlexEvent):void 
    { 
     dispatchEvent(new Event(Event.COMPLETE)); 
    } 
} 

Когда Flex Initialize завершения прелоудер отправляет Event.COMPLETE. Но я хочу, чтобы иметь возможность слушать событие в моем приложении flex и делать что-то, когда он отправляет сообщения. Когда он отправляет, предварительный загрузчик удаляет себя, поэтому его решающее значение. Любая идея о том, как я мог слушать из моего приложения flex?

С уважением Adlertz

ответ

1

Init_Complete событие прелоадер в обжигали после прелоадер получает событие CREATION_COMPLETE приложения.

Порядок инициализации таков:

  • Preloader начинает загружать ваше приложение;
  • Приложение загружено, начинает инициализацию;
  • Приложение инициализировано, отправляет CREATION_COMPLETE;
  • Preloader получает приложение.CREATION_COMPLETE, отправляет INIT_COMPLETE;
  • Ваш класс preloader получает INIT_COMPLETE Preloader;
  • Ваш предварительный загрузчик отправляет событие COMPLETE;
  • Preloader удаляет класс preloader и отправляет (закрытое) событие PRELOADER_DONE;
  • Ваше приложение отображается.

Что это означает, что в данном случае является то, что Application.CREATION_COMPLETE эквивалентно Preloader.INIT_COMPLETE - если вы хотите знать, когда прелоадер рассылает Init_Complete затем слушать CREATION_COMPLETE.

Вы можете это подтвердить, просмотрев исходный код класса Preloader.

0

Я не уверен, что именно это вы пытаетесь достичь. Если вы просто хотите что-то сделать во время инициализации приложения или создания, вы можете использовать события creationComplete или intialize в приложении. Есть ли причина, по которой вам нужно знать, как только прелоадер будет завершен (предполагая, что это будет отличаться от события creationComplete от приложения, я не думаю, что это будет)?

Update:

так что вы просто хотите, чтобы иметь возможность слушать Полное событие из прелоадера правильного?

Попробуйте это: создайте обработчик события initalize в приложении и попытайтесь подключить прослушиватель событий к прелоадеру. это будет выглядеть примерно так (это не тестировался, так что, возможно, опечаток и т.д.)

public function applicationInitalize_handler (e:FlexEvent) : void 
{ 
Application.preloader.addEventListener(Event.COMPLETE,myEventHandler); 
} 

посмотреть, если это может работать.

+0

Я попробовал Application.application.preloader.addEventListener (Event.COMPLETE, onPreloaderComplete) в моей функции инициализации в своем приложении, но получил ошибку # 1009: не могу получить доступ к свойству или методу ссылки на нулевой объект. – 2009-03-26 16:05:06

+0

как вы настраиваете свой предварительный загрузчик? вы помещаете его как свойство в тег mx: application? –

+0

да я. Является ли это признанным после того, как я добавляю слушателя? – 2009-03-27 09:46:02

0

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

Предварительный загрузчик отображается до тех пор, пока вы не отправите событие Event.COMPLETE из вашего прелоадера.

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

(Если вам интересно, посмотрите на исходный код Flex Preloader в функции «displayClassCompleteHandler»)

0

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

-1

Событие APPLICATION_COMPLETE приложения, похоже, выдается сразу после того, как Preloader запускает событие Event.COMPLETE ... просто слушайте это?

0

В приложении Flex вам необходимо прослушать событие Application.applicationComplete.

Если в вашем классе Preloader у вас есть функция, которая выглядит как

private function onFlexInitComplete(event:FlexEvent):void 
{ 
    dispatchEvent(new Event(Event.COMPLETE)); 
} 

вы хотите, чтобы убедиться, что заголовок файла приложения выглядит как

<s:Application 
    preloader = "MyPreloader" 
    applicationComplete="onApplicationComplete();" > 

С помощью этой установки, onApplicationComplete() будет запущен, когда вы решите отправить событие Event.COMPLETE из вашего прелоадера.

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