Портфолио AS3 XML: изображения укладываются друг на друга, а не заканчиваются - PullRequest
0 голосов
/ 13 февраля 2011

Я недавно начал изучать 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 Ответ

1 голос
/ 14 февраля 2011

Когда вы создаете экземпляр загрузчика (и вызываете на нем 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");
}
...