1 votes

Écouter les événements du préchargeur en flex

J'ai un préchargeur dans mon application Flex :

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));
    }
}

Lorsque l'initialisation de Flex est terminée, le préchargeur envoie un Event.COMPLETE. Mais je veux pouvoir écouter l'événement dans mon application Flex et faire quelque chose quand il est envoyé. Lorsqu'il est envoyé, le préchargeur se retire de lui-même, c'est pourquoi il est crucial. Une idée sur la façon dont je pourrais écouter à partir de mon application Flex ?

Salutations Adlertz

1voto

Sly_cardinal Points 3109

L'événement INIT_COMPLETE du préchargeur est déclenché après que le préchargeur a reçu l'événement CREATION_COMPLETE de l'application.

L'ordre d'initialisation est le suivant :

  • Le préchargeur commence à charger votre application ;
  • Application téléchargée, commence à s'initialiser ;
  • L'application est initialisée, elle envoie CREATION_COMPLETE ;
  • Le préchargeur reçoit Application.CREATION_COMPLETE et envoie INIT_COMPLETE ;
  • Votre classe de préchargeur reçoit le message INIT_COMPLETE du préchargeur ;
  • Votre préchargeur envoie l'événement COMPLETE ;
  • Le Preloader supprime votre classe de préchargement et envoie l'événement (privé) PRELOADER_DONE ;
  • Votre application s'affiche.

Dans ce cas, cela signifie que l'Application.CREATION_COMPLETE est équivalente au Preloader.INIT_COMPLETE - si vous voulez savoir quand le préchargeur envoie INIT_COMPLETE, écoutez CREATION_COMPLETE.

Vous pouvez confirmer tout cela en consultant le code source de la classe Preloader.

0voto

Ryan Guill Points 6115

Je ne sais pas exactement ce que vous essayez d'obtenir. Si vous voulez simplement faire quelque chose au moment où l'application est initialisée ou que la création est terminée, vous pouvez utiliser les événements creationComplete ou intialize sur l'application. Y a-t-il une raison pour laquelle vous avez besoin de savoir dès que le préchargeur est terminé (en supposant que cela soit différent de l'événement creationComplete de l'application, je ne pense pas que ce soit le cas) ?

Mise à jour :

Vous voulez donc simplement être capable d'écouter l'événement Complete du préchargeur, n'est-ce pas ?

Essayez ceci : créez un gestionnaire d'événement initalize sur l'application et essayez d'attacher un écouteur d'événement au préchargeur. Cela ressemblerait à quelque chose comme ceci (ce n'est pas testé donc il peut y avoir des fautes de frappe, etc)

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

pour voir si ça peut marcher.

0voto

Sly_cardinal Points 3109

La raison pour laquelle j'ai besoin de savoir quand le préchargeur est terminé est que je veux lire un film directement après, où la première image du film ressemble à l'image du préchargeur.

Le préchargeur est affiché jusqu'à ce que vous envoyiez l'événement Event.COMPLETE depuis votre préchargeur.

Si vous souhaitez afficher quelque chose entre l'achèvement de votre préchargeur et l'affichage de l'application, vous devez le faire dans votre préchargeur avant d'envoyer l'événement COMPLETE. Si vous n'envoyez pas l'événement COMPLETE, votre préchargeur sera affiché pour toujours.

(Si vous êtes curieux, consultez le code source du préchargeur Flex dans la fonction "displayClassCompleteHandler").

0voto

Flex.INIT_COMPLETE est déclenché lorsque l'application Flash a terminé son initialisation. Il est donc envoyé exactement après l'événement initialize de l'application principale.

0voto

Sam P Points 82

Dans votre application Flex, vous devez écouter l'événement Application.applicationComplete.

Si dans votre classe Preloader vous avez une fonction qui ressemble à ceci

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

vous devez vous assurer que l'en-tête de votre fichier d'application ressemble à ceci

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

Avec cette configuration, onApplicationComplete() sera déclenchée chaque fois que vous déciderez d'envoyer l'événement Event.COMPLETE depuis votre préchargeur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X