Récupérer width d'un MovieClip dynamique

HekThor Messages postés 3 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 21 juillet 2009 - 10 juil. 2009 à 11:34
oloufemi Messages postés 20 Date d'inscription dimanche 22 octobre 2006 Statut Membre Dernière intervention 30 juin 2011 - 12 juil. 2009 à 05:53
Bonjour !

Je poste ici pour relancer un petit problème sur lequel je bloquais et que je suis sur le point de résoudre.

Je
cherche en fait à récupérer la largeur d'un clip, qui n'est pas fixe.
J'en ai besoin pour une galerie de miniatures défilante.

J'ai créé deux clips : le premier contient le second qui contient toutes les miniatures issues d'un xml.

Je cherche à récupérer la valeur du width du premier clip, sachant que pour le moment, un trace renvoie toujours la valeur 0...

Je
ne créé peut être pas ce clips où et quand il faut, c'est pour cela que
j'aurais besoin de l'aide d'une âme charitable, que je torche une bonne
fois pour toute cette galerie

Je
place mon code au cas ou... Inspiré de deux sources différentes, et
amélioré, ca peut toujours servir pour quiconque en aurait besoin...

<ol class="dp-as" start="1"><li class="alt">import flash.net.URLLoader; </li><li class="">    import flash.net.URLRequest; </li><li class="alt">    import fl.containers.UILoader; </li><li class="">    import fl.controls.ProgressBar; </li><li class="alt">    import fl.transitions.Tween; </li><li class="">    import fl.transitions.easing.*; </li><li class="alt">    import fl.transitions.TweenEvent; </li><li class="">    import flash.events.*; </li><li class="alt">    import flash.text.*; </li><li class="">    import flash.filters.*; </li><li class="alt">    //Import TweenMax </li><li class="">    import gs.*; </li><li class="alt">         </li><li class="">    //Constantes     </li><li class="alt">    var dossierImage:String = 'images/'; </li><li class="">    var dossierImageMini:String = 'images/min/';     </li><li class="alt">         </li><li class="">         </li><li class="alt">    //Chargeur qui téléchargera notre fichier XML    </li><li class="">    var chargeur:URLLoader = new URLLoader (); </li><li class="alt">    //objet URLRequest qui contient l´url du fichier XML: </li><li class="">    var adresse:URLRequest = new URLRequest ("galerie.xml"); </li><li class="alt">                     </li><li class="">    chargeur.load(adresse); </li><li class="alt">    chargeur.addEventListener(Event.COMPLETE, finDuChargementXML); </li><li class="">     </li><li class="alt">     </li><li class="">    //Variable contenant le texte alternatif </li><li class="alt">    var alt:String; </li><li class="">     </li><li class="alt">    /*Style utilisé pour le texte Alternatif*/ </li><li class="">    var formatTitre:TextFormat = new TextFormat; </li><li class="alt">    formatTitre.color = 0x888888; </li><li class="">    formatTitre.size = 17; </li><li class="alt">    formatTitre.font = 'tahoma´; </li><li class="">    formatTitre.align = 'center&#180;; </li><li class="alt">     </li><li class="">    //Champ texte pour le texte alternatif </li><li class="alt">    var texteAlt:TextField = new TextField(); </li><li class="">                    texteAlt.text = ''; </li><li class="alt">                    texteAlt.x = 325; </li><li class="">                    texteAlt.y = 425; </li><li class="alt">                    texteAlt.width = 400; </li><li class="">                    this.addChild(texteAlt); </li><li class="alt">     </li><li class="">    //Champ texte pour le message de chargement </li><li class="alt">    var chargement:TextField = new TextField(); </li><li class="">                    chargement.text = 'Chargement en cours...'; </li><li class="alt">                    chargement.setTextFormat(formatTitre); </li><li class="">                    chargement.width = 200; </li><li class="alt">                    chargement.x = 350; </li><li class="">                    chargement.y = 200; </li><li class="alt">                    this.addChild(chargement); </li><li class="">                     </li><li class="alt">var gallerie:MovieClip = new MovieClip(); </li><li class="">var monClip_mc:MovieClip = new MovieClip(); </li><li class="alt"> </li><li class="">addChild(gallerie); </li><li class="alt">gallerie.addChild(monClip_mc); </li><li class=""> </li><li class="alt"> </li><li class="">    /*Une fois que le fichier XML  est chargé...*/ </li><li class="alt">    function finDuChargementXML(evt:Event):void{ </li><li class="">            //Objet XML </li><li class="alt">            var monXML:XML = new XML(evt.target.data); </li><li class="">            //UILoader qui contiendra l´image originale </li><li class="alt">            var photoPrincipale:UILoader = new UILoader(); </li><li class="">                        photoPrincipale.source = dossierImage+monXML.image[1].attribute("src"); </li><li class="alt">                        photoPrincipale.x = 150; </li><li class="">                        photoPrincipale.y = 10; </li><li class="alt">                        photoPrincipale.scaleContent = false; </li><li class="">             </li><li class="alt">            var translation:Array = [photoPrincipale.x, photoPrincipale.x+ 100]; </li><li class="">             </li><li class="alt">            //Variable qui contiendra l´image qui est selectionnée </li><li class="">            var select:String; </li><li class="alt">             </li><li class="">             </li><li class="alt">            texteAlt.text = monXML.image[1].attribute("alt"); </li><li class="">            texteAlt.setTextFormat(formatTitre); </li><li class="alt">             </li><li class="">            //On attache le Loader à la scene </li><li class="alt">            this.addChild(photoPrincipale); </li><li class="">             </li><li class="alt">            /*Pour les miniatures*/ </li><li class="">            for(var i:String in monXML.image) { </li><li class="alt">                var uil:UILoader = new UILoader(); </li><li class="">                        uil.source = dossierImageMini+monXML.image[i].attribute("src"); </li><li class="alt">                        uil.buttonMode=true; </li><li class="">                        uil.name = i; </li><li class="alt">                        uil.x = 10; </li><li class="">                        uil.y = 300; </li><li class="alt">                        uil.y += int((int(i)/9))*0; </li><li class="">                if(int(i)%9!=0){ </li><li class="alt">                        uil.x += (int(i)%50)*80; </li><li class="">                } </li><li class="alt">                 </li><li class="">                        uil.width = uil.height = 70; </li><li class="alt">                        uil.alpha = 0.5; </li><li class="">                        uil.scaleContent= true; </li><li class="alt">                        uil.autoLoad = true; </li><li class="">                         </li><li class="alt">                        //Les écouteurs sur les miniatures </li><li class="">                        uil.addEventListener(MouseEvent.CLICK,clicImage); </li><li class="alt">                        uil.addEventListener(MouseEvent.MOUSE_OVER,overImage); </li><li class="">                        uil.addEventListener(MouseEvent.MOUSE_OUT,outImage); </li><li class="alt">                monClip_mc.addChild(uil); </li><li class="">        } </li><li class="alt">        /*Quand on clique sur une miniature...*/ </li><li class="">        function clicImage(e:Event):void{ </li><li class="alt">            //e.currentTarget.name correspond à la position de l´image </li><li class="">            //Si l´image sur laquelle on a cliquée est déjà selectionnée, il ne se passe rien.... </li><li class="alt">            if(select == monXML.image[e.currentTarget.name].attribute("src")){ </li><li class="">                return; </li><li class="alt">            } </li><li class="">             </li><li class="alt">            select = monXML.image[e.currentTarget.name].attribute("src"); </li><li class="">            alt = monXML.image[e.currentTarget.name].attribute("alt"); </li><li class="alt">                 </li><li class="">                 </li><li class="alt">            var myTweentText:Tween = new Tween(texteAlt, "alpha", Strong.easeOut, 1, 0, 1, true); </li><li class="">            var myTweenA:Tween = new Tween(photoPrincipale, "alpha", Strong.easeOut, 1, 0, 1, true); </li><li class="alt">            var myTweenPPW:Tween = new Tween(photoPrincipale, "x", Strong.easeIn, translation[0], translation[1],1, true); </li><li class="">            var myTweenPPA:Tween = new Tween(photoPrincipale, "alpha", Strong.easeIn, 1, 0, 1, true); </li><li class="alt">            myTweenA.addEventListener(TweenEvent.MOTION_FINISH, changeImage); </li><li class="">             </li><li class="alt">        } </li><li class="">         </li><li class="alt">        /*Quand on veut changer d´image (logiquement après avoir cliqué sur une miniature)*/ </li><li class="">        function changeImage(e:Event):void{ </li><li class="alt">            //On change la source de l´image </li><li class="">            photoPrincipale.source = dossierImage+select; </li><li class="alt">             </li><li class="">            //On change le texte descriptif </li><li class="alt">            texteAlt.text = alt; </li><li class="">            texteAlt.setTextFormat(formatTitre); </li><li class="alt">             </li><li class="">            //Et la photo arrive de façon élégante </li><li class="alt">            var myTweenPPA2:Tween = new Tween(photoPrincipale, "alpha", Strong.easeOut, 0, 1, 1, true); </li><li class="">            var myTweenPPW2:Tween = new Tween(photoPrincipale, "x", Strong.easeOut, translation[1], translation[0], 1, true); </li><li class="alt">            var myTweentText2:Tween = new Tween(texteAlt, "alpha", Strong.easeOut, 0, 1, 1, true); </li><li class="">        } </li><li class="alt">         </li><li class="">        /*Quand on passe la souris sur une miniature...*/ </li><li class="alt">        function overImage(e:Event):void{ </li><li class="">            //Ombre sur miniatures </li><li class="alt">            var monOmbre:DropShadowFilter = new DropShadowFilter(); </li><li class="">                        monOmbre.distance = 3; </li><li class="alt">                        monOmbre.color = 0xAAAAAA; </li><li class="">                        monOmbre.blurX = 5; </li><li class="alt">                        monOmbre.blurY = 5; </li><li class="">                        monOmbre.quality = 3; </li><li class="alt">                        e.currentTarget.filters = [monOmbre]; </li><li class="">            //Effets cools de transitions                </li><li class="alt">            var myTweenMA2:Tween = new Tween(e.currentTarget, "alpha", Strong.easeOut, 0.5, 1, 1, true); </li><li class="">            var myTweenMW2:Tween = new Tween(e.currentTarget, "width", Elastic.easeOut, e.currentTarget.width, 75, 1, true); </li><li class="alt">            var myTweenMH2:Tween = new Tween(e.currentTarget, "height", Elastic.easeOut, e.currentTarget.height, 75, 1, true); </li><li class="">        } </li><li class="alt">         </li><li class="">        /*Quand on quitte la miniature*/ </li><li class="alt">        function outImage(e:Event):void{ </li><li class="">            //Ombre sur miniatures </li><li class="alt">            var monOmbre:DropShadowFilter = new DropShadowFilter(); </li><li class="">                        monOmbre.distance = 0; </li><li class="alt">                        monOmbre.color = 0x888888; </li><li class="">                        monOmbre.blurX = 0; </li><li class="alt">                        monOmbre.blurY = 0; </li><li class="">                        monOmbre.quality = 3; </li><li class="alt">            e.currentTarget.filters = [monOmbre]; </li><li class="">            //Effets cools de transitions </li><li class="alt">            var myTweenMA:Tween = new Tween(e.currentTarget, "alpha", Strong.easeOut, 1, 0.5, 1, true); </li><li class="">            var myTweenMW:Tween = new Tween(e.currentTarget, "width", Elastic.easeOut, e.currentTarget.width, 70, 1, true); </li><li class="alt">            var myTweenMH:Tween = new Tween(e.currentTarget, "height", Elastic.easeOut, e.currentTarget.height, 70, 1, true); </li><li class="">             </li><li class="alt">        } </li><li class="">} </li><li class="alt"> </li><li class=""> </li><li class="alt">//Save the horizontal center </li><li class="">var centerX:Number = stage.stageWidth / 2; </li><li class="alt"> </li><li class="">//Save the width of the whole gallery </li><li class="alt">var galleryWidth:Number = 1400; </li><li class=""> </li><li class="alt">trace(monClip_mc.width); </li><li class="">trace(gallerie.width); </li><li class="alt"> </li><li class="">//Speed of the movement (calculated by the mouse position in the moveGallery() function) </li><li class="alt">var speed:Number = 0; </li><li class=""> </li><li class="alt">//Add an ENTER_FRAME listener for the animation </li><li class="">addEventListener(Event.ENTER_FRAME, moveGallery); </li><li class="alt"> </li><li class="">function moveGallery(e:Event):void { </li><li class="alt"> </li><li class="">    //Calculate the new speed </li><li class="alt">    speed = -(0.05 * (mouseX - centerX)); </li><li class=""> </li><li class="alt">    //Update the x coordinate </li><li class="">    gallerie.x+=speed; </li><li class="alt"> </li><li class="">    //Check if we are too far on the right (no more stuff on the left edge) </li><li class="alt">    if (gallerie.x>0) { </li><li class=""> </li><li class="alt">        //Update the gallery´s coordinates </li><li class="">        gallerie.x= (-galleryWidth/2); </li><li class="alt">    } </li><li class=""> </li><li class="alt">    //Check if we are too far on the left (no more stuff on the right edge) </li><li class="">    if (gallerie.x<(-galleryWidth/2)) { </li><li class="alt"> </li><li class="">        //Update the gallery´s coordinates </li><li class="alt">        gallerie.x=0; </li><li class="">    } </li><li class="alt"> </li><li class="">} </li><li class="alt"> </li></ol>

1 réponse

oloufemi Messages postés 20 Date d'inscription dimanche 22 octobre 2006 Statut Membre Dernière intervention 30 juin 2011
12 juil. 2009 à 05:53
Salut,
Je ne comprends pas bien ton probleme, est ce que tu cherche a redimensionner automatiquement la grande image?
0
Rejoignez-nous