31/05/2010

Communication entre swf chargé et Flex

Flex permet de charger des fichiers swf avec le composant 'SWFLoader'. Nous pouvons lancer des actions dans le swf qui seront répercutées dans Flex et inversement.
  1. Envoi d'information d'un swf chargé dans Flex pour lancer une commande dans Flex
Dans le fla :
Je souhaite dans mon exemple afficher un message dans un composant text situé dans Flex.
  • Je crée une variable qui va contenir les données a envoyer :
var mesInfos : String = "Voici mon texte"; 
  • Je crée un bouton (ici nommé envoi_btn)  qui déclenchera l'évènement d'envoi des données
envoi_btn.addEventListener(MouseEvent.CLICK, nomDeMaFonction); 
  • Je crée la fonction qui enverra les données
function nomDeMaFonction( evt:Event ):void 

    dispatchEvent(new Event("nomDeMonAction",true));
}  
Dans le Flex :
Je met un composant SWFLoader qui chargera mon swf, ici nommé monSwf
Je met un composant Text qui affichera les données envoyées, ici nommé affichage_txt
  • Je crée une fonction qui récupère les données envoyées. Les éléments présents dans les 2 fichiers sont la variable 'mesInfos' et le 'nomDeMonAction'.
<![CDATA[
        function initFlash():void   
        {
             monSwf.content.addEventListener( "nomDemonAction" , handleEvent ); 
        }
        function handleEvent(evt:Event):void 
        { 
            var infoRecu : String = monSwf.content['mesInfos']; 
            affichage_txt.text=infoRecu;
        }
        ]]>
  • Je lance ma fonction initFlash au charment de ma page
<mx:Application ...creationComplete="initFlash()">
  1. Envoi d'information de Flex vers le swf chargé 
Dans Flex :
Je souhaite dans mon exemple afficher un message dans un champs texte dynamique situé dans mon fla (ici nommé texteRecu_txt). Je souhaite également jouer la timeline principale.
  • Je crée une fonction qui va envoyer du texte à Flash :
function envoiTexte():void   
        {
            var eventTexte:TextEvent = new TextEvent(TextEvent.LINK);
            eventTexte.text = "Texte envoyé par Flex";
            monSwf.content.dispatchEvent(eventTexte);
        }
  • Je crée une fonction qui va déclencher une action dans Flash
        function envoiAction():void
        {
            var monAction:Event = new Event("joueAnim");
            monSwf.content.dispatchEvent(monAction);  
        }
Dans Flash :
J'ai mon champs texte posé sur la scène et une timeline contenant plusieurs images.
Je crée le code qui va recevoir le texte de ma fonction envoiTexte et la fonction qui affichera ce texte dans mon champs.
//reception d'un texte
this.addEventListener(TextEvent.LINK, onTextEvent);
function onTextEvent(evt:TextEvent){
    texteRecu_txt.text=evt.text;
    }
Je crée le code qui va recevoir le texte de ma fonction envoiAction et la fonction onMyEvent qui contiendra les actions que je souhaite lancer à la réception de cet even.
//reception d'une action
this.addEventListener("joueAnim", onMyEvent);
function onMyEvent(evt:Event){
    play();
}

    Aucun commentaire:

    Enregistrer un commentaire