AS3 XML产品组合:图像堆叠在一起而不是被终止

时间:2011-02-13 20:48:49

标签: xml actionscript-3 class loader

我最近开始学习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幻灯片的教程,到目前为止没有任何帮助我。

1 个答案:

答案 0 :(得分:1)

当您实例化(并在其上调用addChild)加载程序时,它会被添加到显示列表中。然后必须将其删除以停止在显示列表中。您可以使用动态Loader.load()在其上调用URLRequest,而不是反复实例化加载程序。这样,你只需要坚持使用一个每次调用它时都会改变的加载器。

例如:

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