2009-08-21 15 views
0

イメージ読み込み問題があります。 ここで、すべての画像が同時にロードされていた&これは、IEのすべてのブラウザがハングしていたためです。 (私は約100のイメージが読み込まれている、32.5 MBの合計サイズ)Mozillaはうまくいっていた。だから私はプリローダーを使って一度に各画像をダウンロードすることに決めました。以下はスクリプトです。しかし、関数LoadZones(index:Number)が再び呼び出されているようです。すべての画像が再びダウンロードを開始してハングアップします。イメージがロードされる前にすべてのスクリプトが実行されています。 In Action Script 2.0

/////////////////// cards = 100; dropzones = 5; _root.loadstatus.cardcount.text = cards; _root.loadstatus.dropzonecount.text = dropzones; _root.loadstatus.dropzonelabel.text = "読み込み中...";

コードをカードゾーンオブジェクトは、いくつかの表示の目的のために使用されていると仮定すると、彼らは実際の負荷と干渉しないように、彼らの親のメソッドをコールバックしていない、私は少し書き換えました
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; 
} 
//////////////////// 

答えて

1

(うまくいけば)より意味をなさない変数があります。

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); 

私は可能な限りあなたのコードから多くの努力を続けました。 最大の変更点は、ロードの種類ごとに1つのリスナー関数しか持たず、ロードごとに新しいリスナーオブジェクトを再定義しないということです。 私はこのコードをテストすることができないので、何かが台無しになることを望みません。

運のベスト

+0

おかげでソートされた応答のためにたくさんは...それをチェックアウトし、最善の方法、それは適しチャンクの残りの部分と、あなたが知っているだろう。 –

関連する問題