2009-08-21 8 views
0

Ich habe ein Problem beim Laden von Bildern. Wo in, alle Bilder wurden zur gleichen Zeit geladen & wegen dieser alle Versionen IE Browser wurden gehängt. (Ich habe rund 100 Bilder geladen. Eine Gesamtgröße von 32,5 MB) Mozilla lief jedoch gut. Also beschloss ich, jedes Bild mit einem Preloader auf einmal herunterzuladen. Unten ist das Skript. Aber es scheint, als ob die Funktion LoadZones (Index: Nummer) erneut aufgerufen wird. und alle Bilder werden erneut geladen, was zu einem Absturz führt.Das gesamte Skript wird ausgeführt, bevor die Bilder geladen werden. In Action Script 2.0

//////////////////// Karten = 100; dropzones = 5; _root.loadstatus.cardcount.text = Karten; _root.loadstatus.dropzonecount.text = dropzones; _root.loadstatus.dropzonelabel.text = "Wird geladen ...";

var i:Number=0,j:Number=0,Exit1:Boolean=false,Exit2:Boolean=false; 
LoadZones(i); 
function LoadZones(index:Number) 
{ 
    if(_root.loadstatus.dropzonelabel.text != "Completed!") 
    { 
     var listener = new Object(); 
     i = Number(index); 
     var zone:MovieClip=_root["dropzone" + String(i)]; 

     pb1.target = zone._name; 

     // the onLoadComplete triggers when all objects are loaded and the progress bar fill animation ends 
     listener.onLoadComplete = function(evt) { 
      i++; 
      trace(pb1.target + "Load Complete!"); 
      if(i < dropzones){ 
       _root.loadstatus.dropzonestatus.text = i+1; 
       LoadZones(Number(i)); 
      }else{ 

       _root.loadstatus.dropzonelabel.text = "Completed!"; 
       _root.loadstatus.cardlabel.text = "Loading..."; 
       trace("call cards" + i); 
       LoadCards(j); 
       Exit1 = true; 
       return false; 
      } 
     } 
     if(Exit1 == false){ 
      pb1.addEventListener("onLoadComplete",listener); 
      trace("LoadZones(index:Number): ------------- "+index); 

      zone.autoLoad = false; 
      zone.scaleContent = true; 
      zone.contentPath= "dropzone"+(i+1)+".jpg"; 
      zone.load(); 
     } 
    } 
    return; 
} 

function LoadCards(index:Number) 
{ 
    if(_root.loadstatus.cardlabel.text != "Completed!") 
    { 
     var listener = new Object(); 
     j = Number(index); 
     var card:MovieClip=_root["card" + String(j) + "z"]; 

     pb1.target = card._name; 

     // the onLoadComplete triggers when all objects are loaded and the progress bar fill animation ends 
     listener.onLoadComplete = function(evt) { 
      j++; 
      trace(pb1.target + "Load Complete!"); 
      if(j < cards){ 
       _root.loadstatus.cardstatus.text = j; 
       LoadCards(Number(j)); 
      }else{ 
       loadComplete(); 
       Exit2 = true; 
       return false; 
      } 
     } 
     if(Exit2 == false){ 
      pb1.addEventListener("onLoadComplete",listener); 
      trace("LoadCards(index:Number): ------------- "+index); 
      card.autoLoad = false; 
      card.scaleContent = true; 
      card.contentPath= "image"+(j+1)+".jpg"; 
      card.load(); 
     } 
    } 
} 


function loadComplete() 
{ 
    var k:Number =0; 
    _root.loadstatus.cardlabel.text = "Completed!"; 
    DrawZones(); 
    for (k = 0; k < dropzones; k++) 
    { 
     _root["dropzone" + k]._alpha = 100; 
     _root["LeftScroll" + k]._alpha = 100; 
     _root["Rightscroll" + k]._alpha = 100; 
     _root["dropzone" + k]._xscale = zonewidth; 
     _root["dropzone" + k]._yscale = zoneheight; 
    }; 
    DrawCards(); 
    for (k = 0; k < cards; i++) 
    { 
     _root["card" + k + "z"]._alpha = 100; 
     _root["card" + k + "z"]._xscale = cardwidth; 
     _root["card" + k + "z"]._yscale = cardheight; 
    } 
    _root.CardScrollRight._alpha = 100; 
    _root.cardscrollleft._alpha = 100; 
    _root.pb1._visible = false; 
    _root.grayscreen._visible = false; 
    _root.loadstatus._visible = false; 
    return false; 
} 
//////////////////// 

Antwort

1

Unter der Annahme, dass die Karte und Zonen Objekte für einige Anzeigezwecke verwendet werden, und nennen Sie diese Methoden nicht in ihren Eltern zurück, so dass sie mit der tatsächlichen Belastung nicht stören, habe ich ein wenig neu geschrieben der Code , mit Variablen, die (hoffentlich) mehr Sinn ergeben.

var zoneLoaderListener:Object = new Object(); 
var cardLoaderListenr:Object = new Object(); 

var dropzones = 5; 
var cards = 100; 
var loadedDropZones = 0; 
var loadedCards = 0; 

function loadZone(index) { 

    var i = Number(index); 
    var zone:MovieClip=_root["dropzone" + String(i)]; 

    pb1.target = zone._name; 

    pb1.addEventListener("onLoadComplete", zoneLoaderListener); 

    trace("LoadZones(index:Number): ------------- "+index); 
    zone.autoLoad = false; 
    zone.scaleContent = true; 
    zone.contentPath= "dropzone"+(i+1)+".jpg"; 
    zone.load(); 

} 
function loadCard(index) { 

    var j = Number(index); 
    var card:MovieClip=_root["card" + String(j) + "z"]; 

    pb1.target = card._name; 

    pb1.addEventListener("onLoadComplete", cardLoaderListener); 
    trace("LoadCards(index:Number): ------------- "+index); 
    card.autoLoad = false; 
    card.scaleContent = true; 
    card.contentPath= "image"+(j+1)+".jpg"; 
    card.load(); 

} 

zoneLoaderListener.onLoadComplete = function (evt) { 
    loadedDropZones++; 
    trace(pb1.target + "Load Complete!"); 
    if(loadedDropZones < dropZones){ 
     _root.loadstatus.dropzonestatus.text = loadedDropZones+1; 
     loadZone(loadedDropZones); 
    }else{ 
     // reached end 
     // no need to load another zone, just begin loading cards 
     _root.loadstatus.dropzonelabel.text = "Completed!"; 
     _root.loadstatus.cardlabel.text = "Loading..."; 
     //trace("call cards" + i); 
     loadCard(0); 
    } 
} 
cardLoaderListener.onLoadComplete = function (evt) { 
    loadedCards++; 
    trace(evt.target + "Load Complete!"); 
    if(loadedCards < cards){ 
     _root.loadstatus.cardstatus.text = loadedCards; 
     loadCard(loadedCards); 
    }else { 
     // last card completed loading 
     loadComplete(); 
    } 
} 
function loadComplete() { 
    trace("Last card completed loading"); 
} 

// init the loading sequence 
loadZone(0); 

Ich habe versucht, so viel wie möglich von Ihrem Code zu halten. Vielleicht die größte Änderung wäre, dass wir jetzt nur eine Listener-Funktion für jeden Lade-Typ haben, und wir definieren kein neues Listener-Objekt für jede Ladung neu. Hoffe nichts ist vermasselt, da ich diesen Code nicht testen kann.

Best of luck

+0

Vielen Dank für die sortierte Antwort ... Wird es überprüfen und lassen Sie wissen, wie sie am besten geeignet, um mit dem Rest der Stücke. –

Verwandte Themen