2009-09-28 8 views
0

j'ai le code suivant dans ActionScript3 pour les images de chargement:ActionScript 3 chargeurs d'image refactoring

// Create the image areas 
    var imageArea1 = new imageArea(); 
    var imageArea2 = new imageArea(); 
    var imageArea3 = new imageArea(); 
    var imageArea4 = new imageArea(); 
    var imageArea5 = new imageArea(); 

    var image1; 
    var image2; 
    var image3; 
    var image4; 
    var image5; 

    addChild(imageArea1); 
    addChild(imageArea2); 
    addChild(imageArea3); 
    addChild(imageArea4); 
    addChild(imageArea5); 

    // Image1 
    // function to load images to the page 
    function loadImage1(url:String):void { 
     image1 = new Loader(); 
     image1.load(new URLRequest(url)); 
     image1.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded1); 
    } 

    //Callback event after image has been loaded. 
    function imageLoaded1(e:Event):void { 
     // Load Image 
     imageArea1.addChild(image1);//display the photo 
     //trace ('width:'+image1.width,' height:'+image1.height); 
     image1.y = (stageHeight-image1.height); 
     //trace(image1.y); 
     var otherindex = getChildIndex(myBackground) 
     setChildIndex(imageArea1,otherindex + 1); 
    } 

Des regards de celui-ci, je dois copier et coller des fonctions loadImage1 et imageLoaded1 pour chaque image. Je voudrais idéalement passer en paramètre à la fonction .addEventListener.

Comment est-ce que je peux refactoriser ceci pour que je n'aie pas besoin de copier et coller les fonctions pour chaque image, il semble répétitif.

Répondre

0

Je pense que la meilleure façon sera d'ajouter le imageX comme paramètre:

function loadImage(url:String, imageObj:Object):void { 
    imageObj = new Loader(); 
    imageObj.load(new URLRequest(url)); 
    imageObj.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded1); 
} 

Sera-ce bon pour vous? J'espère que ce sera :)

0

Essayez cela (je ne l'ai pas testé, mais il devrait fonctionner si vous pouvez l'obtenir pour compiler - ne pas oublier les importations appropriées ;-)):

var imageURLs:Array = ['blah.png', 'blah2.png', 'foo.png']; 
var imageLoaders:Array = new Array(); 
var imageAreas:Array = new Array(); 

for each (var url:String in imageURLs) { 
    var loader:Loader = new Loader(); 
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded); 
    loader.load(new URLRequest(url)); 

    imageLoaders.push(loader); 

    var theImageArea:imageArea = new imageArea(); 
    addChild(theImageArea); 
    imageAreas.push(theImageArea); 
} 

function imageLoaded(e:Event):void 
{ 
    var loader:Loader = Loader(e.target.loader); 

    var index:int = imageLoaders.indexOf(loader); 
    imageAreas[index].addChild(loader); 

    loader.y = (stageHeight - loader.height); 

    var otherChildIndex:int = getChildIndex(myBackground); 
    setChildIndex(imageAreas[index], otherChildIndex + 1); 
}