LocalConnect pas très bien compris

Signaler
Messages postés
65
Date d'inscription
jeudi 17 mars 2011
Statut
Membre
Dernière intervention
17 mars 2011
-
Messages postés
65
Date d'inscription
jeudi 17 mars 2011
Statut
Membre
Dernière intervention
17 mars 2011
-
Bonsoir,

J'ai créé deux fichiers swf différents insérés dans la même page html :

1) le premier est une galerie de miniatures

2) le deuxième est les photos en grandeur nature

Je voudrais faire en sorte que lorsque l'on clique sur la miniature la photo correspondante grandeur nature s'affiche dans l'autre swf.

Pour ce faire on m'a parlé de la classe Local Connect, j'ai un peu feuilleté la documentation actionscript mais j'ai pas très bien compris comment ça marche, je sais que je dois créer un object comme celà :

var monLocalConnect:LocalConnection = new LocalConnection();
monLocalConnect.connect("print_portfolio");

print_portfolio étant le nom de mon premier swf

mon code as est le suivant dans mon premier swf :

var PhotoXML:XML = new XML();
//création d'un nouvel objet XML
var PhotoNumber:Number;
var TotalPhotos:Number;
var RootNode:XMLNode;
var index:Number = 0;
var nombre:Number = 0;
loadPhotoXML("print_portfolio_thumb.xml");
//pr que la fonction ne renvoye rien
function loadPhotoXML(filename:String):Void {
    PhotoXML.ignoreWhite = true;
    //sinon tous les return sont pris en considération
    PhotoXML.load(filename);
    //chargement du XML
    PhotoXML.onLoad = function(success:Boolean):Void  {
        if (success) {
            PhotoNumber = 0;
            //initialisation du nombre de photos
            RootNode = this.firstChild;
            //pour faciliter la navigation dans les noeuds XML
            TotalPhotos = RootNode.firstChild.childNodes.length;
            //nbre de balises  enfant d'  dans mon XML
            showThumbails(0,"2007");
            // fonction à créer pr faire apparaître la 1ère photo
        } else {
            trace("Problème de chargement du XML !");
        }
    };
}

function showThumbails(index,year:String):Void {
    _root.theyear = year;
    var MovieDepthCounter:Number = 10;
    var photoHolder:MovieClip;
    var xPos:Number;
    var yPos:Number = 20;
    var photoThumb:String;
    var indice:Number = 0;
    nombre+= index;
    indice = nombre/4;
    
    trace("nombre vaut "+nombre);    
    trace("index vaut "+index);
    trace("indice vaut "+indice);
    
    for (var i:Number = 0; i<RootNode.childNodes.length; i++) 
    {
        
        if (RootNode.childNodes[i].attributes.year == year) 
        {
            var CategoryXML:XMLNode = RootNode.childNodes[i];
            TotalPhotos = CategoryXML.childNodes.length;
            trace(year+" has "+TotalPhotos+" photos");
                            if (indice (Math.floor(TotalPhotos/4)) || year "2003")
                {
                    //pr empêcher d'aller en avant qd on est à la dernière photo
                    
                    Next_btn.enabled = false;
                                    
                                        
                } 
                
                else 
                {
                    Next_btn.enabled = true;
                }
                
                if (nombre == 0) 
                {
                    //pr empêcher d'aller en arrière qd on est à la première photo
                    Previous_btn.enabled = false;
                    Next_btn.enabled = true;
                } 
                else 
                {
                    Previous_btn.enabled = true;
                }
            
            
    
            for (var j:Number = 0; j<4; j++) {
                photoThumb = CategoryXML.childNodes[j+nombre].childNodes[1].firstChild.nodeValue;
                
                //trace(photoThumb);
                photoHolder = this.createEmptyMovieClip("photoHolder"+j, MovieDepthCounter);
                //trace(photoHolder);
                xPos = 30+65*j;
                photoHolder._x = xPos;
                photoHolder._y = yPos;
                var photoHolderLoader:MovieClipLoader = new MovieClipLoader();
                photoHolderLoader.loadClip(photoThumb, photoHolder);
                MovieDepthCounter++;
            }
        }
    }
    //fin du for
}
//fin de la fonction showThumbails


je souhaiterais donc envoyer la variable photoThumb qui va me permettre de répérer dans le fichier swf destinataire le noeud xml correspondant et donc en conséquence afficher la photo grandeur nature correspondante du noeud xml.

Je ne vois pas où insérer le code pour envoyer la variable et je ne comprends pas très les paramètres de send...

Merci d'avance pour votre aider !

8 réponses

Messages postés
40
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
23 mars 2009

Bonjour,

Quel est l'intérêt d'avoir 2 swf dans du html ? En l'occurence tu peux soit tout avoir dans un seul swf, ou loader un swf dans le premier swf. Dans les deux cas ce sera plus simple ! (enfin à mon avis hein).
Messages postés
65
Date d'inscription
jeudi 17 mars 2011
Statut
Membre
Dernière intervention
17 mars 2011

Je vous explique : en fait  c'est à cause de la disposition de ma page web, j'ai voulu mettre les miniatures à gauche du menu et la photo grandeur nature à droite, le flash s'intègre de manière transparente dans le html mais si j'avais fait qu'un seul swf, les boutons html de mon menu auraient été recouverts par le flash et donc seraient inaccessibles.

Regardez ma page et vous comprendrez mieux mes raisons : ma page

A moins que vous ayez une autre idée pour réaliser ce projet ? J'ai bien pensé placer mon menu dans un div au z-index supérieur à celui du div contenant le swf mais je crains que de navigateur en navigateur cela pose problème ??
Messages postés
40
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
23 mars 2009

Dans tous les cas je maintient qu'il serait beaucoup plus simple pour vous de faire tout en flash... Pourquoi avoir des boutons au milieu en javascript (il me semble), qui seraient plus faciles à réaliser en flash ? D'autant plus qu'il n'y aura aucun problème d'un navigateur à l'autre... Alors que la vous risquez d'avoir des problèmes de décalage, etc...
En fait nous sommes en quelque sorte concurrents, car nous réalisons la même chose... De mon côté, je vous assure que pour les sites que je réalise dans cet esprit, la totalité en flash est beaucoup mieux et flexible...
Messages postés
1378
Date d'inscription
samedi 9 octobre 2004
Statut
Membre
Dernière intervention
1 novembre 2010
1
Messages postés
65
Date d'inscription
jeudi 17 mars 2011
Statut
Membre
Dernière intervention
17 mars 2011

Merci bali_balo, je vais essayer tout ça !

mdc888fr tu as peut-être raison mais on avait reçu comme consigne de ne pas réaliser tout en flash, en fait c'est un site de fin d'études pour une formation de webmaster et j'avais des contraintes telles que incorporer des éléments flashs ponctuels, coder en xhtml et en css etc.....
Messages postés
65
Date d'inscription
jeudi 17 mars 2011
Statut
Membre
Dernière intervention
17 mars 2011

Rebonjour ;-),

j'ai testé le localconnect, avec un bouton pas de problème, mais le hic ici c'est que dans mon cas, le movieclip est créé dynamiquement et qu'apparement lui appliquer une fonction sur un onRelease n'a pas l'air de fonctionner (je ne parviens pas à cliquer sur mes miniatures !) .

Quel événement dois-je associer à mon movieClip photoHolder pour que je puisse cliquer dessus et voir le trace attestant que la variable photoThumb est bien envoyée ???

Merci d'avance

Mon code :

function showThumbails(index,year:String):Void {
    _root.theyear = year;
    var MovieDepthCounter:Number = 10;
    var photoHolder:MovieClip;
    var xPos:Number;
    var yPos:Number = 20;
    var photoThumb:String;
    var indice:Number = 0;
    nombre+= index;
    indice = nombre/4;
    
    trace("nombre vaut "+nombre);    
    trace("index vaut "+index);
    trace("indice vaut "+indice);
    
    for (var i:Number = 0; i<RootNode.childNodes.length; i++) 
    {
        
        if (RootNode.childNodes[i].attributes.year == year) 
        {
            var CategoryXML:XMLNode = RootNode.childNodes[i];
            TotalPhotos = CategoryXML.childNodes.length;
            trace(year+" has "+TotalPhotos+" photos");
                            if (indice (Math.floor(TotalPhotos/4)) || year "2003" )
                {
                    //pr empêcher d'aller en avant qd on est à la dernière photo
                    
                    Next_btn.enabled = false;
                                    
                                        
                } 
                
                if ((nombre+1) > (TotalPhotos-4) )
                {
                    //pr empêcher d'aller en avant qd on est à la dernière photo
                    
                    Next_btn.enabled = false;
                                    
                                        
                }
                
                else 
                {
                    Next_btn.enabled = true;
                }
                
                if (nombre == 0) 
                {
                    //pr empêcher d'aller en arrière qd on est à la première photo
                    Previous_btn.enabled = false;
                    Next_btn.enabled = true;
                } 
                else 
                {
                    Previous_btn.enabled = true;
                }
            
            
    
            for (var j:Number = 0; j<4; j++) {
                photoThumb = CategoryXML.childNodes[j+nombre].childNodes[1].firstChild.nodeValue;
                //photoThumb = "http://www.webdesign-4u.be/web-4u/images/portfolio/pictures/2003/botybenelux.jpg";
                //trace(photoThumb);
                photoHolder = this.createEmptyMovieClip("photoHolder"+j, MovieDepthCounter);
                //trace(photoHolder);
                xPos = 30+65*j;
                photoHolder._x = xPos;
                photoHolder._y = yPos;
                var photoHolderLoader:MovieClipLoader = new MovieClipLoader();
                photoHolderLoader.loadClip(photoThumb, photoHolder);
                
                photoHolder.onRelease = function() {
               Envoi = new LocalConnection();
               Envoi.send("print_portfolio_thumb2", "mamethode", photoThumb);
               delete Envoi;
               trace ("Je suis le sender et voici photoThumb :"+photoThumb);
            }; 
                MovieDepthCounter++;
            }
        }
    }
    //fin du for
}
//fin de la fonction showThumbails

Messages postés
65
Date d'inscription
jeudi 17 mars 2011
Statut
Membre
Dernière intervention
17 mars 2011

Re -bonjour  :wink: ,

le localconnect marche mais la variable photoThumb envoyée est tjs la même la dernière (la dernière de la boucle), comment faire pour qu'au clic sur la miniature c'est la valeur photoThumb correspondante qui soit envoyée?

function showThumbails(index,year:String):Void {
    _root.theyear = year;
    var MovieDepthCounter:Number = 10;
    var photoHolder:MovieClip;
    var xPos:Number;
    var yPos:Number = 20;
    var photoThumb:String;
    var indice:Number = 0;
    nombre+= index;
    indice = nombre/4;
    
    trace("nombre vaut "+nombre);    
    trace("index vaut "+index);
    trace("indice vaut "+indice);
    
    for (var i:Number = 0; i<RootNode.childNodes.length; i++) 
    {
        
        if (RootNode.childNodes[i].attributes.year == year) 
        {
            var CategoryXML:XMLNode = RootNode.childNodes[i];
            TotalPhotos = RootNode.childNodes[i].childNodes.length;
            trace(year+" has "+TotalPhotos+" photos");
                            if (indice (Math.floor(TotalPhotos/4)) || year "2003" )
                {
                    //pr empêcher d'aller en avant qd on est à la dernière photo
                    
                    Next_btn.enabled = false;                            
                                        
                } 
                
                if ((nombre+1) > (TotalPhotos-4) )
                {
                    //pr empêcher d'aller en avant qd on est à la dernière photo
                    
                    Next_btn.enabled = false;                                
                                        
                }
                
                else 
                {
                    Next_btn.enabled = true;
                }
                
                if (nombre == 0) 
                {
                    //pr empêcher d'aller en arrière qd on est à la première photo
                    Previous_btn.enabled = false;
                    Next_btn.enabled = true;
                } 
                else 
                {
                    Previous_btn.enabled = true;
                }
            
            
    
            for (var j:Number = 0; j<4; j++) 
            {
                photoThumb = RootNode.childNodes[i].childNodes[j+nombre].childNodes[1].firstChild.nodeValue;
                
                trace(photoThumb);
                photoHolder = this.createEmptyMovieClip("photoHolder"+j, MovieDepthCounter);
                //trace(photoHolder);
                xPos = 30+65*j;
                photoHolder._x = xPos;
                photoHolder._y = yPos;
                
                var photoHolderLoader:MovieClipLoader = new MovieClipLoader();
                
                // création de l'écouteur
                var eLoader:Object = new Object();
                eLoader.onLoadInit = function(photoHolder:MovieClip):Void  
                {
                    // p_mcCible correspond à photoHolder
                    
                    photoHolder._alpha = 0;
                    photoHolder.onLoad = doFade(photoHolder, "in", 5);
                    photoHolder.onRelease = function() 
                    {
                       Envoi = new LocalConnection();
                       Envoi.send("portfolio_thumb_fade", "mamethode", photoThumb);
                       trace ("photoThumb envoyé correspond à : "+photoThumb);                                     
                    }
                };
                photoHolderLoader.addListener(eLoader);
                
                photoHolderLoader.loadClip(photoThumb, photoHolder);
                
                MovieDepthCounter++;
            }
        }
    }
    //fin du for
    
}
//fin de la fonction showThumbails


Merci d'avance
Messages postés
65
Date d'inscription
jeudi 17 mars 2011
Statut
Membre
Dernière intervention
17 mars 2011

Bonjour,


Pour pouvoir m'y retrouver dans mon swf recepteur, j'ai créé une
variable myphoto qui représente l'addition de photoHolder (qui va de 0
à 3) puisque c'est par 4 que j'ai paramétré la galerie miniature et de
la variable nombre qui va me permettre finalement d'envoyer un nombre
allant de 0 à TotalPhotos contenus dans cette année, le problème c'est
que l'envoi de la variable se fait mais elle ne retient que la dernière
valeur de la boucle j<4 alors que moi j'ai besoin que lorsqu'on
clique ça m'envoie la valeur correspondante !!


j'aimerais aussi envoyer une deuxième variable à l'autre swf, (la
variable year qui va me permettre de savoir dans quel noeud le swf
recepteur devra chercher pour afficher photo grandeur max), puis je
simplement la rajouter après la première variable avec une virgule ???


Merci d'avance !



function showThumbails(index,year:String):Void {

    _root.theyear = year;

    var MovieDepthCounter:Number = 10;

    var photoHolder:MovieClip;

    var xPos:Number;

    var yPos:Number = 20;

    var photoThumb:String;

    var indice:Number = 0;

    nombre+= index;

    indice = nombre/4;

    

    trace("nombre vaut "+nombre);    

    trace("index vaut "+index);

    trace("indice vaut "+indice);

    

    for (var i:Number = 0; i<RootNode.childNodes.length; i++) 

    {

        

        if (RootNode.childNodes[i].attributes.year == year) 

        {

            var CategoryXML:XMLNode = RootNode.childNodes[i];

            TotalPhotos = RootNode.childNodes[i].childNodes.length;

            trace(year+" has "+TotalPhotos+" photos");

            

                if (indice (Math.floor(TotalPhotos/4)) || year "2003" )

                {

                    //pr empêcher d'aller en avant qd on est à la dernière photo

                    

                    Next_btn.enabled = false;                            

                                        

                } 

                

                if ((nombre+1) > (TotalPhotos-4) )

                {

                    //pr empêcher d'aller en avant qd on est à la dernière photo

                    

                    Next_btn.enabled = false;                                

                                        

                }

                

                else 

                {

                    Next_btn.enabled = true;

                }

                

                if (nombre == 0) 

                {

                    //pr empêcher d'aller en arrière qd on est à la première photo

                    Previous_btn.enabled = false;

                    Next_btn.enabled = true;

                } 

                else 

                {

                    Previous_btn.enabled = true;

                } 

            

            

    

            for (var j:Number = 0; j<4; j++) 

            {

                photoThumb = RootNode.childNodes[i].childNodes[j+nombre].childNodes[1].firstChild.nodeValue;

                

                trace(photoThumb);

                trace("nombre vaut : "+nombre);

                photoHolder = this.createEmptyMovieClip("photoHolder"+j, MovieDepthCounter);

                //trace(photoHolder);

                xPos = 30+65*j;

                photoHolder._x = xPos;

                photoHolder._y = yPos;

                

                var photoHolderLoader:MovieClipLoader = new MovieClipLoader();

                trace ("photoHolder vaut :"+photoHolder);

                var recup:String = photoHolder._name.slice(-1); //pr extraire le numéro de la photo (de 0 à3)

                var recupNumber:Number = parseInt(recup); //pr convertir string en number

                var myphoto:Number = recupNumber + nombre; //pr pouvoir
envoyer à l'autre swf le numéro de la photo correspondante

                trace ("myphoto vaut : " +myphoto);

                // création de l'écouteur

                var eLoader:Object = new Object();

                eLoader.onLoadInit = function(photoHolder:MovieClip):Void  

                {

                    // p_mcCible correspond à photoHolder

                    

                    photoHolder._alpha = 0;

                    photoHolder.onLoad = doFade(photoHolder, "in", 5);

                    photoHolder.onRelease = function() 

                    {

                       Envoi = new LocalConnection();

                       Envoi.send("portfolio_thumb_fade", "mamethode", myphoto);

                       trace("photoThumb envoyé correspond à : "+myphoto);

                       trace ("year correspond à "+year);

                    }

                };

                photoHolderLoader.addListener(eLoader);

                

                photoHolderLoader.loadClip(photoThumb, photoHolder);

                

                MovieDepthCounter++;

            }

        }

    }

    //fin du for

    

}

//fin de la fonction showThumbails

function doFade(mcName, alphaDirection, changeRate) {

    mcName.onEnterFrame = function() {

        if (alphaDirection == "out") {

            if (this._alpha<=0) {

                this._alpha = 0;

                delete this.onEnterFrame;

            } else {

                this._alpha -= changeRate;

            }

        } else if (alphaDirection == "in") {

            if (this._alpha>=100) {

                this._alpha = 100;

                delete this.onEnterFrame;

            } else {

                this._alpha += changeRate;

            }

        }

    };

}