Galerie flash AS3

biguiz Messages postés 198 Date d'inscription vendredi 4 avril 2008 Statut Membre Dernière intervention 6 novembre 2009 - 3 sept. 2008 à 00:43
cs_ourso Messages postés 92 Date d'inscription mercredi 11 octobre 2006 Statut Membre Dernière intervention 5 décembre 2010 - 3 sept. 2008 à 18:59
bonjour tout le monde !

J'ai un petit problème de débutant.
J'ai fait une galerie images à partir d'un tutorial anglais, et tout marche très bien.
Quand je clique sur une miniature, la photo apparait en plus grand.

Ce que je souhaiterais, c'est en fait, rajouter un texte dans une zone de texte dynamique, pour décrire cette photo.
Or, la manière dont est appelé les children du xml n'est pas celle que j'ai apprise en cours.
Donc je bloque un peu.
Je vous remercie d'avance pour votre aide.

Voici le code :

import fl.containers.UILoader;
import caurina.transitions.*;

//---------loading the external xml file-------
var urlRequest:URLRequest = new URLRequest("pics.xml");
var urlLoader:URLLoader = new URLLoader();
var myXML:XML = new XML();
var xmlList:XMLList;
myXML.ignoreWhitespace = true;
urlLoader.addEventListener(Event.COMPLETE,fileLoaded);
urlLoader.load(urlRequest);
//--------holds the paths to the thumbnails-------
var arrayURL:Array = new Array();
//--------holds the paths to the big photos-------
var arrayName:Array = new Array();
//--------holds the thumbnail objects-------
var holderArray:Array = new Array();
//--------represents the number of collumns-------
var nrColumns:uint = 5;
//-------represents the container of our gallery
var sprite:Sprite = new Sprite();
addChild(sprite);
var thumb:Thumbnail;
//-------- the thumbnails container-------
var thumbsHolder:Sprite = new Sprite();
sprite.addChild(thumbsHolder);
//-------- the photoLoader container-------
var loaderHolder:Sprite = new Sprite();
loaderHolder.graphics.beginFill(0xffffff,1);
loaderHolder.graphics.drawRect(0,0,550,330);
loaderHolder.graphics.endFill();
loaderHolder.x = 1000;
loaderHolder.y = 10;
sprite.addChild(loaderHolder);
//-------- loads the big photo-------
var photoLoader:UILoader = new UILoader();
photoLoader.width = 540;
photoLoader.height = 320;
photoLoader.y = 5;
photoLoader.x = 5;
photoLoader.buttonMode = true;
photoLoader.addEventListener(MouseEvent.CLICK,onClickBack);
loaderHolder.addChild(photoLoader);

/* we loop through the xml file
populate the arrayURL, arrayName and position the thumbnalis*/
function fileLoaded(event:Event):void {
    myXML = XML(event.target.data);
    xmlList = myXML.children();
    for (var i:int=0; i<xmlList.length(); i++) {
        var picURL:String = xmlList[i].url;
        var picName:String = xmlList[i].big_url;
        arrayURL.push(picURL);
        arrayName.push(picName);
        holderArray[i] = new Thumbnail(arrayURL[i],i,arrayName[i]);
        holderArray[i].addEventListener(MouseEvent.CLICK,onClick);
        holderArray[i].name = arrayName[i];
        holderArray[i].buttonMode = true;
        if (i<nrColumns) {
            holderArray[i].y = 65;
            holderArray[i].x = i*110+65;
        } else {
            holderArray[i].y = holderArray[i-nrColumns].y+110;
            holderArray[i].x = holderArray[i-nrColumns].x;
        }
        thumbsHolder.addChild(holderArray[i]);
    }
}
//----handles the Click event added to the thumbnails--
function onClick(event:MouseEvent):void {
    photoLoader.source = event.currentTarget.name;
    Tweener.addTween(thumbsHolder, {x:-50, time:1, transition:"easeInSine"});
    Tweener.addTween(loaderHolder, {x:10, time:1, transition:"easeInSine"});
    Tweener.addTween(thumbsHolder, {alpha:0, time:1, transition:"linear"});
    Tweener.addTween(loaderHolder, {alpha:1, time:1, transition:"linear"});
}
//----handles the Click event added to the photoLoader----
function onClickBack(event:MouseEvent):void {
    Tweener.addTween(thumbsHolder, {x:0, time:1, transition:"easeOutBounce"});
    Tweener.addTween(loaderHolder, {x:1000, time:1, transition:"easeOutBounce"});
    Tweener.addTween(thumbsHolder, {alpha:1, time:2, transition:"linear"});
    Tweener.addTween(loaderHolder, {alpha:0, time:2, transition:"linear"});
}

1 réponse

cs_ourso Messages postés 92 Date d'inscription mercredi 11 octobre 2006 Statut Membre Dernière intervention 5 décembre 2010
3 sept. 2008 à 18:59
c'est quoi la méthode que l'on t'a apprise en cours ?
variable = xml_load.firstChild.childNodes[t].attributes.un_attribut_XML; ?
dans ce cas en effet tu dois bloquer parce que c'est de l'as 2.
en AS 3 les loading et la navigation on changé, le loading en plus pointu et demande donc un effort d'adaptation. Quand à la navigation elle est devenue simplissime notamment avec l'utilisation de la boucle for each.
Je t'envoie un exemple sur lequel je bosse en ce moment pour te donner une idée de la navigation en AS 3 :

// on suppose que ton xml est loadé est qu'il se trouve dans un objet XMLstring appelé xml_datas.
//là, ma boucle for each va aller naviguer dans chaque noeud enfant du xml mais j'aurai pu noter aussi : xml_datas.*
// en gros chaque fois qu'il visite un noeud il l'appele du nom de la variable que tu lui indique, ici item .

for each (var item:XML in xml_datas.children())
                {   
                   // là je verifie la longeur de chaque noeud enfant de ma variable item
                     var longueur:int = item.*.length();
                    var i:int = 0;
                     // ici je rentre le nom de la balise dans une variable
                    var nom:String = item.name();

                     // et là je visite les noeud enfant de item

                    for each (var subNode:XML in item.*)
                    {
                     // la je donne une condition en fonction de l'attribut type contenu dans le noeud représenté par item et aussi du nom de balise de item

                       if ((item.@type=="simple")&&(item.name()=="palette"))   
                        {   
                            // encore des transformation d'attribut en varaible  
                            var identifiant:String = subNode.@id.toString();
                            var couleur:String = subNode.@valeur.toString();
                            // note ici comment on donne un nom dynamique à une variable au sein d'un objet

                           palette[identifiant]=couleur;
                           
                        }
                        // trigger de fin de ma boucle principale

                        if(i+1==longueur)
                        {
                            palette["couleurs_disponibles"] = string_array;
                            palette["valeurs"] = value_array;
                            //trace("fin du parsage");
                       
                        }
                        i++;
                    }
                }
en espérant que ça t'éclairera et avec ça tu peut retravailler ta fonction de parsage d'info en provenance du XML
Steph
0
Rejoignez-nous