2011-02-13 89 views
0

我最近開始學習AS3,我決定用它製作一個投資組合網站。我正在加載關於我從外部XML文件創建的網站的信息。AS3 XML組合:圖像堆疊在彼此之上而不是被終止

它的所有工作都很好,但是當我將一張新照片加載到舞臺上時,前一張照片仍然存在,這在我的理解中應該不會發生。正如我從Adobe的AS3指南瞭解到的,一旦您創建了一個加載器的新實例,則應刪除前一個加載器。

我一直在找遍各地的解決方案,但我找不到一個工作。我嘗試使用.unload類,並嘗試removeChild,但它一直給我錯誤。

這裏是我一直在使用的代碼:

import fl.transitions.Tween; 
import fl.transitions.TweenEvent; 
import fl.transitions.easing.*; 
import flash.utils.Timer; 
import flash.events.TimerEvent; 
import flash.filters.*; 
import flash.display.MovieClip; 
import flash.events.MouseEvent; 

var xmlLoader:URLLoader = new URLLoader(); 
var xmlData:XML = new XML(); 

xmlLoader.addEventListener(Event.COMPLETE, LoadXML); 

xmlLoader.load(new URLRequest("portfolio.xml")); 

function LoadXML(e:Event):void { 
    xmlData = new XML(e.target.data); 
    ParsePortfolio(xmlData); 
} 

function ParsePortfolio(siteInput:XML):void { 

    var titleList:XMLList = siteInput.Site.title; 
    var servicesList:XMLList = siteInput.Site.services; 
    var urlList:XMLList = siteInput.Site.url; 
    var picList:XMLList = siteInput.Site.picture; 

    var XX:Number = 0; 

    var titleElement:XML = titleList[XX]; 
    var servicesElement:XML = servicesList[XX]; 
    var urlElement:XML = urlList[XX]; 
    var picElement:XML = picList[XX]; 

    container_mc.title_txt.text = (titleElement); 
    container_mc.services_txt.text = (servicesElement); 

    var pictureNumber:String = picElement; 
    var my_loader:Loader = new Loader(); 
    my_loader.load(new URLRequest(pictureNumber)); 
    container_mc.pictureFrame.addChild(my_loader); 

    next.addEventListener (MouseEvent.CLICK, NbuttonClicked); 
    prev.addEventListener (MouseEvent.CLICK, PbuttonClicked); 

    function NbuttonClicked(e:Event):void { 

     var t1:Tween = new Tween (container_mc, "alpha", Strong.easeOut, 1, 0, .2, true); 

     t1.addEventListener(TweenEvent.MOTION_FINISH, dropbomb);   

     function dropbomb() {  

      XX++; 

      if (XX == titleList.length()) { 
      XX = 0; 
      } 

      var titleElement:XML = titleList[XX]; 
      var servicesElement:XML = servicesList[XX]; 
      var urlElement:XML = urlList[XX]; 
      var picElement:XML = picList[XX]; 

      container_mc.title_txt.text = titleElement; 
      container_mc.services_txt.text = servicesElement; 
      var pictureNumber:String = picElement; 

      trace(pictureNumber); 

      var my_loader:Loader = new Loader(); 
      my_loader.load(new URLRequest(pictureNumber)); 
      container_mc.pictureFrame.addChild(my_loader);    

      visit.addEventListener (MouseEvent.CLICK, VbuttonClicked); 

      function VbuttonClicked(e:Event):void { 

      navigateToURL(new URLRequest(urlElement), "_blank"); 

      } 

      var t2:Tween = new Tween (container_mc, "alpha", Strong.easeOut, 0, 1, .2, true); 
     } 
    } 

    function PbuttonClicked(e:Event):void { 

     var t3:Tween = new Tween (container_mc, "alpha", Strong.easeOut, 1, 0, .2, true); 

     t3.addEventListener(TweenEvent.MOTION_FINISH, dropbomb); 

     function dropbomb() { 

      if (XX == 0) 
      { 
      XX = (titleList.length()) - 1; 
      } 

      else {XX--;} 

      var titleElement:XML = titleList[XX]; 
      var servicesElement:XML = servicesList[XX]; 
      var urlElement:XML = urlList[XX]; 
      var picElement:XML = picList[XX];   

      container_mc.title_txt.text = titleElement; 
      container_mc.services_txt.text = servicesElement; 
      var pictureNumber:String = picElement; 

      var my_loader:Loader = new Loader(); 
      my_loader.load(new URLRequest(pictureNumber)); 

      visit.addEventListener (MouseEvent.CLICK, VbuttonClicked); 

      function VbuttonClicked(e:Event):void { 

      navigateToURL(new URLRequest(urlElement), "_blank"); 

      }   

      var t4:Tween = new Tween (container_mc, "alpha", Strong.easeOut, 0, 1, .2, true); 

     } 
    } 
} 

電影剪輯被手動添加到舞臺上。我不知道這是造成這個問題還是它完全不相關。

更具體地說,雖然container_mc淡出,但您可以看到上圖顯示它們正在堆疊而不是被替換。

我真的很感謝一些幫助,至少我想知道我做錯了什麼,並指出正確的方向。

我很抱歉沒有注意的代碼和愚蠢的問題,但我真的看了很多答案,我找到了關於創建XML幻燈片的教程,至今沒有任何幫助。

+0

避免所有這些嵌套函數,你問一個頭疼的時候,你需要檢討在未來這段代碼。 – ocodo 2011-02-13 21:18:20

+0

謝謝你的建議,我已經在處理一些頭疼的問題了:P,我一直想要修復這些代碼,但是我在等我解決這個問題之前,先要解決這個問題。 – Nuriel 2011-02-13 21:33:30

回答

1

當您實例化(並調用其上的addChild)加載程序時,它會添加到顯示列表中。然後它必須被移除以停止在顯示列表中。您可以使用動態URLRequest在其上調用Loader.load(),而不是一遍又一遍實例化加載器。這樣,你只需堅持每次調用它就會改變的一個加載器。

例如:

import flash.events.Event; 
import flash.display.Loader; 
import flash.net.URLRequest; 

var _loader:Loader = new Loader(); 
var _toLoad:URLRequest = new URLRequest("path.jpg"); 
_loader.load(_toLoad); 
addChild(_loader); 

loadImage("1.jpg"); 

function loadImage(path:String):void 
{ 
    _toLoad = new URLRequest(path); 
    _loader.load(_toLoad); 
    _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadCompleted, false, 0, true); 
} 

function loadCompleted(evt:Event):void 
{ 
    trace("load completed"); 
}