2010-06-07 4 views
3

J'ai une banque d'images XML, assez standard, et j'ai un chargeur, avec des clips vidéo dans lesquels je veux charger les images, le problème que je suis En cours d'exécution, je veux que les images soient chargées dans des clips vidéo séparés, donc j'utilise une instruction case pour spécifier où elles vont. Cependant, je ne peux les amener à charger dans un seul clip, je suppose qu'ils sont en cours de chargement les uns des autres et je ne sais pas comment les séparer. Je posterai mon code. Cela n'a aucun sens pour moi, mais si vous avez des suggestions qui seraient vraiment bien.Charger des images dans des clips séparés à partir d'un fichier XML, Flash, Actionscript 3.0

Je peux faire des chargeurs séparés et ensuite faire 1 image par chargeur, mais cela ne me semble pas juste.

var counterNumber:Number = 0; 

    function callThumbs():void{ 
    for (var i:Number = 0; i <3; i++){ 
     thumbLoaded(); 
     counterNumber++; 
    } 
    } 




    function thumbLoaded(){ 

    var photoLoader = new Loader(); 

    switch (counterNumber){ 

      case 1: 
       photoLoader.load(new URLRequest(MovieClip(this.parent)[email protected][0])); 
       whole.boxOne.pictureLoader.addChild(photoLoader); 
       trace("1Done"); 
       break; 

      case 2: 
       photoLoader.load(new URLRequest(MovieClip(this.parent)[email protected][0])); 
       whole.boxTwo.pictureLoader.addChild(photoLoader); 
       trace("2Done"); 
       break;  
     } 
    } 

Répondre

1

Voici comment je m'y prendrais. La seule chose que je n'ai pas faite est de changer la position des MovieClips après qu'ils soient chargés avec les images. Vous pouvez facilement ajouter cette fonctionnalité dans la fonction imageLoaded().

Placez le code suivant dans le panneau Actions de la première image d'un fichier FLA AS3. Cela suppose qu'un répertoire nommé 'images' existe dans le même répertoire que FLA/SWF.

//Create array of image filenames 
var filenames:Array = new Array(); 
filenames[0] = 'some_image.jpg'; 
filenames[1] = 'some_other_image.jpg'; 
filenames[2] = 'and_another.jpg'; 

//Declare variables 
const IMAGES_DIRECTORY:String = 'images/'; 
var loaders:Array = new Array(); 
var movieClips:Array = new Array(); 

//This function instantiates the exact number of Loader objects that are required 
//and initiates the loading process for each image file. As each image is loaded, 
//imageLoaded() is called 
function createLoaders(filenamesAsArray:Array, directory:String):void 
{ 
    for(var i:int = 0; i < filenamesAsArray.length; i++) 
    { 
     loaders[i] = new Loader(); 
     loaders[i].load(new URLRequest(directory + filenamesAsArray[i])); 
     loaders[i].contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded); 
    } 
} 

createLoaders(filenames, IMAGES_DIRECTORY); 

//This function is called as each Loader object is completely loaded 
//It creates each individual movieclip, adds the image to it, and then adds the MC to the stage 
function imageLoaded(e:Event):void 
{ 
    if(e.target.content.bitmapData) 
    { 
     var mc:MovieClip = new MovieClip(); 
     var bmp:Bitmap = new Bitmap(e.target.content.bitmapData); 
     mc.addChild(bmp); 
     movieClips.push(mc); 
     addChild(movieClips[movieClips.length - 1]); 
    } 
} 

A propos de l'importation de données XML

Regardez dans le XML Object.

Loading XML Exemple

Le document XML pour l'exemple:

<images> 
    <image> 
     <title>Portrait of a Woman</title> 
     <filename>portrait.jpg</filename> 
    </image> 
    <image> 
     <title>Rural Landscape</title> 
     <filename>landscape.jpg</filename> 
    </image> 
    <image> 
     <title>My Cat</title> 
     <filename>cat.jpg</filename> 
    </image> 
</images> 

AS3 pour le chargement du document XML ci-dessus

//Instantiate some objects (URLoader and XML) 
var xmlLoader:URLLoader = new URLLoader(); 
var xmlData:XML = new XML(); 

//Listen for the instance of URLLoader (xmlLoader) to trigger Event.COMPLETE, 
//which will call the function named 'loadXML()' 
xmlLoader.addEventListener(Event.COMPLETE, loadXML); 

//Initiate the process of loading the XML document 
//In this case, 'test.xml' is located in the same directory as the SWF/FLA 
//that this code is located in 
xmlLoader.load(new URLRequest('test.xml')); 

//This is the function that will be called by the event listener above (when 
//the xmlLoader signals Event.COMPLETE 
function loadXML(e:Event):void 
{ 
    //Retrieve the contents of the XML document 
    xmlData = new XML(e.target.data); 

    //Trace the entire document: 
    trace(xmlData); 

    //Trace the filename for the first <image> node 
    trace(xmlData.image[0].filename); 
} 

Bien sûr, votre document XML peut être très différent, dans ce cas, vous devez vous entraîner à récupérer l'information exacte que vous voulez. C'est la partie la plus délicate, à mon avis. En outre, vous voudriez instancier un tableau en dehors de la portée de la fonction loadXML ci-dessus. Ensuite, remplissez récursivement le tableau avec les noms de fichiers du document XML.

+0

J'attends votre message avec impatience, merci de votre intérêt. –

+0

rapide réflexion sur ce que vous m'avez donné ici, merci btw. Dire que je voulais prendre l'image d'un fichier XML, au lieu de simplement les inclure dans le dossier/images et de les localiser de cette façon, cela serait-il possible? En organisant peut-être les images dans leur propre tableau? –

+0

Voir les informations supplémentaires sur le chargement de XML que je viens d'ajouter. –

Questions connexes