Forums Développement Multimédia

Aller au contenu

- - - - -

probleme de xml loader

TUTO

8 réponses à ce sujet

#1 edwardo

    Ceinture Blanche

  • Members
  • Pip
  • 11 messages

Posté 20 May 2011 - 21:34 PM

Bonjour,

j'ai suivi un tutoriel pour une galerie en scroller qui charge ses miniatures dynamiquement, via un fichier xml
il fonctionne bien, lorsqu'on clique sur une vignette il ouvre mon exporer , normal vu qu'on a un navigateToURL dans la fonction
'clickScrollerItem'
Ce que je voudrait c'est qu'à la place de ce navigatetoURL, je puise charger le swf qui correspond à ma vignette et qui porte le même nom, par le biais du même fichier xml.(en dessous)
j'ai passé un temps fou dessus et je piétine dans la dernière ligne droite, merci pour un petit coup de main.

EDDY


<images>
<image src="images/btns/image1.swf" title="image1" url="images/swfs/image1.swf" />
<image src="images/btns/image2.swf" title="image2" url="images/swfs/image2.swf" />
<image src="images/btns/image3.swf" title="image3" url="images/swfs/image3.swf" />
<image src="images/btns/image4.swf" title="image4" url="images/swfs/image4.swf" />
<image src="images/btns/image5.swf" title="image5" url="images/swfs/image5.swf" />
<image src="images/btns/image6.swf" title="image6" url="images/swfs/image6.swf" />
<image src="images/btns/image7.swf" title="image7" url="images/swfs/image7.swf" />
<image src="images/btns/image8.swf" title="image8" url="images/swfs/image8.swf" />
<image src="images/btns/image9.swf" title="image9" url="images/swfs/image9.swf" />
<image src="images/btns/image10.swf" title="image10" url="images/swfs/image10.swf" />
</images>
////////////////////////////////////////////////////////////////////////////////////////
 

import caurina.transitions.*;

//load xml
var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML = new XML();
xmlLoader.addEventListener(Event.COMPLETE, LoadXML);

var xmlPath:String = "mk9.xml";
xmlLoader.load(new URLRequest(xmlPath));
trace("loading xml from: " + xmlPath);

function LoadXML(e:Event):void {
trace("xml loading complete");
xmlData = new XML(e.target.data);
//trace(xmlData.image);
buildScroller(xmlData.image);
}


var scroller:MovieClip = new MovieClip();
var speed:Number;
var padding:Number = 20;
var thumbFadeOut:Number = .2;
var thumbFadeIn:Number = 1;
var thumbSmall:Number = 1;
var thumbLarge:Number = 1.1;
this.addChild(scroller);
scroller.y = 500;
scroller.x = padding;
//build scroller from xml
function buildScroller(imageList:XMLList):void{
trace("build Scroller");
for (var item:uint = 0; item < imageList.length(); item++ ) {
var thisOne:MovieClip = new MovieClip();

//outline
var blackBox:Sprite = new Sprite();
blackBox.graphics.beginFill(0xFFFFFF);
blackBox.graphics.drawRect( -1, -1, 142, 107);
blackBox.alpha = thumbFadeOut;
thisOne.addChild(blackBox);
thisOne.blackBox = blackBox;

thisOne.x = thisOne.myx = (140 + padding) * item;
thisOne.itemNum = item;
thisOne.title = imageList[item].attribute("title");
thisOne.link = imageList[item].attribute("url");
thisOne.src = imageList[item].attribute("src");

//image container
var thisThumb:Sprite = new Sprite();
//add image
var ldr:Loader = new Loader();
var urlReq:URLRequest = new URLRequest(thisOne.src);
trace("loading thumbnail "+item+" into Scroller: " + thisOne.src);
ldr.load(urlReq);
//assign event listeners for Loader
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
ldr.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
thisThumb.addChild(ldr);
thisOne.addChild(thisThumb);

//create listeners for this thumb
thisOne.buttonMode = true;
thisOne.addEventListener(MouseEvent.MOUSE_OVER, overScrollerItem);
thisOne.addEventListener(MouseEvent.MOUSE_OUT, outScrollerItem);
thisOne.addEventListener(MouseEvent.CLICK, clickScrollerItem);

//add item
scroller.addChild(thisOne);
}

scroller.addEventListener(Event.ENTER_FRAME, moveScrollerThumbs);
trace("termination of build scroller");
}

function overScrollerItem(e:MouseEvent):void {
//trace("over" + e.currentTarget.name);
Tweener.addTween(e.currentTarget, { scaleX:thumbLarge, scaleY:thumbLarge, x:e.currentTarget.myx - e.currentTarget.width * Math.abs(thumbSmall - thumbLarge)/2, y: -e.currentTarget.width * Math.abs(thumbSmall - thumbLarge)/2, time:1 } );
Tweener.addTween(e.currentTarget.blackBox, { alpha:thumbFadeIn, time: 1 } );
}
function outScrollerItem(e:MouseEvent):void {
//trace("out" + e.currentTarget.name);
Tweener.addTween(e.currentTarget, { scaleX:thumbSmall, scaleY:thumbSmall, x:e.currentTarget.myx, y:0, time:1 } );
Tweener.addTween(e.currentTarget.blackBox, { alpha:thumbFadeOut, time: 1 } );
}
function clickScrollerItem(e:MouseEvent):void {
//trace("clicked item " + e.currentTarget.itemNum + " - visit url: " + e.currentTarget.link);
var urlRequest:URLRequest = new URLRequest(e.currentTarget.link);
try {
navigateToURL(urlRequest);
}
catch (e:Error) {
// handle error here
trace(e);
}
}
function completeHandler(e:Event):void {
//trace("thumbnail complete "+e.target.loader.parent.parent.name);
//size image into scroller
resizeMe(e.target.loader.parent, 140, 105, true, true, false);
Tweener.addTween(e.target.loader.parent.parent, { alpha:1, time: .5 } );
}
function errorHandler(e:IOErrorEvent):void {
trace("thumbnail error="+e);
}


//The resizing function
// parameters
// required: mc = the movieClip to resize
// required: maxW = either the size of the box to resize to, or just the maximum desired width
// optional: maxH = if desired resize area is not a square, the maximum desired height. default is to match to maxW (so if you want to resize to 200x200, just send 200 once)
// optional: constrainProportions = boolean to determine if you want to constrain proportions or skew image. default true.
function resizeMe(mc:DisplayObject, maxW:Number, maxH:Number=0, constrainProportions:Boolean=true, centerHor:Boolean=true, centerVert:Boolean=true):void{
maxH = maxH == 0 ? maxW : maxH;
mc.width = maxW;
mc.height = maxH;
if (constrainProportions) {
mc.scaleX < mc.scaleY ? mc.scaleY = mc.scaleX : mc.scaleX = mc.scaleY;
}
if (centerHor) {
mc.x = (maxW - mc.width) / 2;
}
if (centerVert){
mc.y = (maxH - mc.height) / 2;
}
}

function moveScrollerThumbs(e:Event):void {
if ( mouseY > scroller.y && mouseY < scroller.y + scroller.height) {//vertically over scroller
if (mouseX < stage.stageWidth/2 - padding*2 && mouseX > 0) {//left of stage explicitly
speed = -(mouseX - (stage.stageWidth/2 - padding*2)) / 8;
}
else if (mouseX > stage.stageWidth/2 + padding*2 && mouseX < stage.stageWidth) {//right of stage explicitly
speed = -(mouseX - (stage.stageWidth/2 + padding*2)) / 8;
}
else {
speed = 0;
}
scroller.x += speed;

//scroller limits
if (scroller.x < -scroller.width + stage.stageWidth - padding) { //if scrolled too far left
scroller.x = -scroller.width + stage.stageWidth - padding;
}
else if (scroller.x > padding) { //if scrolled to far right
scroller.x = padding;
}
}
}


#2 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 20 May 2011 - 21:46 PM

j'ai ajouté les balises de code (bouton "<>") , essaie d'y penser la prochaine fois :roll:

manifestement ton code d'origine était déjà un pâté… je sais pas les autres mais moi ça me donne pas envie de lire.

je vois que tu as posé la même question dans une autre salle, je la supprime donc
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#3 edwardo

    Ceinture Blanche

  • Members
  • Pip
  • 11 messages

Posté 24 May 2011 - 22:41 PM

oui je sais je ne suis qu'un vilain petit vermisseau, mais pour un conseil un encouragement une piste pour faire avancer positivement mon affaire c'est par où?

je réitère, j'ai un scroller qui charge dynamiquement mes vignettes seulement je n'arrive pas vraiment à charger et décharger mes images, depuis l'autre fois j'ai essayer de retravailer la chose qui donne ça:



import caurina.transitions.*;
import gs.*;
import gs.easing.*;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import flash.xml.*;
//load xml
var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML = new XML();
xmlLoader.addEventListener(Event.COMPLETE, LoadXML);
       
var xmlPath:String = "mk9.xml";
xmlLoader.load(new URLRequest(xmlPath));
trace("loading xml from: " + xmlPath);

function LoadXML(e:Event):void {
        trace("xml loading complete");
        xmlData = new XML(e.target.data);
        //trace(xmlData.image);
        buildScroller(xmlData.image);
       
}


var scroller:MovieClip = new MovieClip();
var speed:Number;
var padding:Number = 77;
var thumbFadeOut:Number = .2;
var thumbFadeIn:Number = 1;
var thumbSmall:Number = 1;
var thumbLarge:Number = 1.1;
this.addChild(scroller);
scroller.y =825;
scroller.x = padding;
//build scroller from xml
function buildScroller(imageList:XMLList):void{
        trace("build Scroller");
        for (var item:uint = 0; item < imageList.length(); item++ )  {
                var thisOne:MovieClip = new MovieClip();
               
                //outline
                var blackBox:Sprite = new Sprite();
                blackBox.graphics.beginFill(0xFFFFFF);
                blackBox.graphics.drawRect( -2, -2, 78, 78);
                blackBox.alpha = thumbFadeOut;
                thisOne.addChild(blackBox);
                thisOne.blackBox = blackBox;
               
                thisOne.x = thisOne.myx = (4 + padding) * item;
                thisOne.itemNum = item;
                thisOne.title = imageList[item].attribute("title");
                thisOne.image = imageList[item].attribute("url");
                thisOne.src = imageList[item].attribute("src");
               
                //image container
                var thisThumb:Sprite = new Sprite();
                //add image
                var ldr:Loader = new Loader();
                var urlReq:URLRequest = new URLRequest(thisOne.src);
                trace("loading thumbnail "+item+" into Scroller: " + thisOne.src);
                ldr.load(urlReq);
                //assign event listeners for Loader
                ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
                ldr.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
                thisThumb.addChild(ldr);
                thisOne.addChild(thisThumb);
               
                //create listeners for this thumb
                thisOne.buttonMode = true;
                thisOne.addEventListener(MouseEvent.MOUSE_OVER, overScrollerItem);
                thisOne.addEventListener(MouseEvent.MOUSE_OUT, outScrollerItem);
                thisOne.addEventListener(MouseEvent.CLICK, clickScrollerItem);
               
                //add item
                scroller.addChild(thisOne);
        }
       
       
        //////////////
        scroller.addEventListener(Event.ENTER_FRAME, moveScrollerThumbs);
        trace("termination of build scroller");
}

function overScrollerItem(e:MouseEvent):void {
        //trace("over" + e.currentTarget.name);
        Tweener.addTween(e.currentTarget, { scaleX:thumbLarge, scaleY:thumbLarge, x:e.currentTarget.myx - e.currentTarget.width * Math.abs(thumbSmall - thumbLarge)/2, y: -e.currentTarget.width * Math.abs(thumbSmall - thumbLarge)/2, time:1 } );
        Tweener.addTween(e.currentTarget.blackBox, { alpha:thumbFadeIn, time: 1 } );
}
function outScrollerItem(e:MouseEvent):void {
        //trace("out" + e.currentTarget.name);
        Tweener.addTween(e.currentTarget, { scaleX:thumbSmall, scaleY:thumbSmall, x:e.currentTarget.myx, y:0, time:1 } );
        Tweener.addTween(e.currentTarget.blackBox, { alpha:thumbFadeOut, time: 1 } );
}
function clickScrollerItem(e:MouseEvent):void {
        try {
                var container=new MovieClip();
addChild(container);
var Xpos:Number = 0;
var Ypos:Number = 0;
var swfMov:URLRequest = new URLRequest( e.currentTarget.image );
var swfLoader:Loader = new Loader();
swfLoader.x = Xpos;
swfLoader.y = Ypos;

//TweenMax.from(swfLoader,2,{delay:0.3,alpha:0,ease:Back.easeOut});

        swfLoader.load(swfMov);
        container.addChild(swfLoader);
        e.currentTarget.addEventListener(MouseEvent.CLICK, removeChildrenOf);
        trace("clicked item " + e.currentTarget.itemNum + " - visit url: " + e.currentTarget.image);

                   
                //navigateToURL(urlRequest);
        }
        catch (e:Error) {
                // handle error here
                trace(e);
        }
 function removeChildrenOf(container:MovieClip):void{
    while(container.numChildren) {
container.removeChildAt(0)
}
    }
}
       
       
       

function completeHandler(e:Event):void {
        trace("thumbnail complete "+e.target.loader.parent.parent.name);
        //size image into scroller
        resizeMe(e.target.loader.parent, 75, 75, true, true, false);
        Tweener.addTween(e.target.loader.parent.parent, { alpha:1, time: .5 } );

}
function errorHandler(e:IOErrorEvent):void {
        trace("thumbnail error="+e);
}


//The resizing function
// parameters
// required: mc = the movieClip to resize
// required: maxW = either the size of the box to resize to, or just the maximum desired width
// optional: maxH = if desired resize area is not a square, the maximum desired height. default is to match to maxW (so if you want to resize to 200x200, just send 200 once)
// optional: constrainProportions = boolean to determine if you want to constrain proportions or skew image. default true.
function resizeMe(mc:DisplayObject, maxW:Number, maxH:Number=0, constrainProportions:Boolean=true, centerHor:Boolean=true, centerVert:Boolean=true):void{
    maxH = maxH == 0 ? maxW : maxH;
    mc.width = maxW;
    mc.height = maxH;
    if (constrainProportions) {
        mc.scaleX < mc.scaleY ? mc.scaleY = mc.scaleX : mc.scaleX = mc.scaleY;
    }
        if (centerHor) {
                mc.x = (maxW - mc.width) / 2;
        }
        if (centerVert){
                mc.y = (maxH - mc.height) / 2;
        }
}

function moveScrollerThumbs(e:Event):void {
        if ( mouseY > scroller.y && mouseY < scroller.y + scroller.height) {//vertically over scroller
                if (mouseX < stage.stageWidth/2 - padding*2 && mouseX > 0) {//left of stage explicitly
                        speed = -(mouseX - (stage.stageWidth/2 - padding*2)) / 8;
                }
                else if (mouseX > stage.stageWidth/2 + padding*2 && mouseX < stage.stageWidth) {//right of stage explicitly
                        speed = -(mouseX - (stage.stageWidth/2 + padding*2)) / 8;
                }
                else {
                        speed = 0;
                }
                scroller.x += speed;
               
                //scroller limits
                if (scroller.x < -scroller.width + stage.stageWidth - padding) { //if scrolled too far left
                        scroller.x = -scroller.width + stage.stageWidth - padding;
                }
                else if (scroller.x > padding) { //if scrolled to far right
                        scroller.x = padding;
                }
        }
}


et mon fichier xml donne ça

<images>
<image src="images/mk9 pics/btns/baraka.swf" title="Baraka" url="images/mk9 pics/swfs/baraka.swf"  />
<image src="images/mk9 pics/btns/ermac.swf" title="ermac" url="images/mk9 pics/swfs/ermac.swf"  />
<image src="images/mk9 pics/btns/jade.swf" title="Jade" url="images/mk9 pics/swfs/jade.swf"  />
<image src="images/mk9 pics/btns/jax.swf" title="Jax" url="images/mk9 pics/swfs/jax.swf"  />
<image src="images/mk9 pics/btns/johnny cage.swf" title="Johnny Cage" url="images/mk9 pics/swfs/johnnycage.swf"  />
<image src="images/mk9 pics/btns/kabal.swf" title="Kabal" url="images/mk9 pics/swfs/kabal.swf"  />
<image src="images/mk9 pics/btns/kano.swf" title="Kano" url="images/mk9 pics/swfs/kano.swf" />
<image src="images/mk9 pics/btns/kitana.swf" title="Kitana" url="images/mk9 pics/swfs/kitana.swf"  />
<image src="images/mk9 pics/btns/kunglao.swf" title="Kunglao" url="images/mk9 pics/swfs/kunglao.swf" />
<image src="images/mk9 pics/btns/liu kang.swf" title="liu kang" url="images/mk9 pics/swfs/liu kang.swf" />
<image src="images/mk9 pics/btns/nightwolf.swf" title="nightwolf" url="images/mk9 pics/swfs/nightwolf.swf"  />
<image src="images/mk9 pics/btns/mileena.swf" title="mileena" url="images/mk9 pics/swfs/mileena.swf"  />
<image src="images/mk9 pics/btns/noob saibot.swf" title="noob saibot" url="images/mk9 pics/swfs/noob saibot.swf"  />
<image src="images/mk9 pics/btns/quanchi.swf" title="quanchi" url="images/mk9 pics/swfs/quanchi.swf" />
<image src="images/mk9 pics/btns/raiden.swf" title="raiden" url="images/mk9 pics/swfs/raiden.swf"  />
<image src="images/mk9 pics/btns/reptile.swf" title="reptile" url="images/mk9 pics/swfs/reptile.swf"  />
<image src="images/mk9 pics/btns/scorpion.swf" title="scorpion" url="images/mk9 pics/swfs/scorpion.swf"  />
<image src="images/mk9 pics/btns/sektor.swf" title="sektor" url="images/mk9 pics/swfs/sektor.swf" />
<image src="images/mk9 pics/btns/shang tsung.swf" title="shang tsung" url="images/mk9 pics/swfs/shang tsung.swf"  />
<image src="images/mk9 pics/btns/sheeva.swf" title="sheeva" url="images/mk9 pics/swfs/sheeva.swf"  />
<image src="images/mk9 pics/btns/sindel.swf" title="sindel" url="images/mk9 pics/swfs/sindel.swf"  />
<image src="images/mk9 pics/btns/smoke.swf" title="smoke" url="images/mk9 pics/swfs/smoke.swf"  />
<image src="images/mk9 pics/btns/sonya.swf" title="sonya" url="images/mk9 pics/swfs/sonya.swf" />
<image src="images/mk9 pics/btns/stryker.swf" title="stryker" url="images/mk9 pics/swfs/stryker.swf"  />
<image src="images/mk9 pics/btns/subzero.swf" title="subzero" url="images/mk9 pics/swfs/subzero.swf"  />
<image src="images/mk9 pics/btns/cyber subzero.swf" title="cyber subzero" url="images/mk9 pics/swfs/cyber subzero.swf"  />
<image src="images/mk9 pics/btns/cyrax.swf" title="cyrax" url="images/mk9 pics/swfs/cyrax.swf"  />
</images>



oui c'est brouilon et caca mais je ne demande qu'a progresseret surtout à comprendre merci

Donc je récapitule:

maintenant j'arrive à charger mes images mas pas à les décharger malgré la fonction removeChildrenOf

ps: pas d'inquiétude si tous les swfs ne correspondent pas exactement aux vignettes: je suis en train de travailler dessus en ce moment même

PEACE

Fichier(s) joint(s)


Modifié par dada, 25 May 2011 - 09:18 AM.
Ajout des balises "code"


#4 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 24 May 2011 - 23:35 PM

bonsoir,

Voir le messageNataly, le 20 May 2011 - 21:46 PM, dit :

j'ai ajouté les balises de code (bouton "<>") , essaie d'y penser la prochaine fois :roll:

quels sont les mots que tu ne comprends pas dans cette phrase ?
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#5 edwardo

    Ceinture Blanche

  • Members
  • Pip
  • 11 messages

Posté 25 May 2011 - 00:08 AM

je ne vois pas de quoi tu parle

#6 dada

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 8510 messages

Posté 25 May 2011 - 09:17 AM

Voir le messagemonsieur ed, le 25 May 2011 - 00:08 AM, dit :

je ne vois pas de quoi tu parle
Dans le message précédent, Nat' te demande d'utiliser les balises de code, en t'expliquant quel bouton c'est, et dans le message suivant tu remets du code sans balises...

#7 lilive

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2993 messages

Posté 25 May 2011 - 09:18 AM

Voir le messagemonsieur ed, le 25 May 2011 - 00:08 AM, dit :

je ne vois pas de quoi tu parle
Bonjour,

Nataly parle de la réponse qu'elle t'a faites plus haut. Tu devrais la relire, et essayer de la comprendre. Il y est question d'un bouton <> que tu devrais trouver quelque part quand tu postes, et qui permet de rendre ton code lisible. As-tu l'impression que le code que tu as posté est lisible? Vois-tu une différence entre l'affichage de ton premier code (corrigé par Nataly) et celui que tu viens de poster? Si tu veux des réponses tu vas devoir faire des efforts, comme tenir compte des réponses qui te sont faites, spécialement dans ce cas si elles émanent de modérateurs.

Reposte ton code avec les balises de code (le bouton <>, donc), et indente ton code. Tu seras au moins lisible.
Ton swf ne sert à rien puisqu'il ne peux charger le .xml que tu ne fournis pas.

Tu peux aussi aller jeter un oeil à ce tutoriel: http://ressources.me...e/diaporama_as3


[edit] ah, grillé par dada....

#8 dada

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 8510 messages

Posté 25 May 2011 - 09:26 AM

Voir le messagelilive, le 25 May 2011 - 09:18 AM, dit :

[edit] ah, grillé par dada....
Oui et j'ai ajouté les balises manquantes au passage, donc maintenant le code est lisible. :)

#9 Phn

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 1648 messages

Posté 25 May 2011 - 13:24 PM

Et en plus on n'a pas l'impression de troller le post :mrgreen:

Ah oui :
code




1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP