Загрузка изображений в отдельные фрагменты фильмов из XML, Flash, Actionscript 3.0 - PullRequest
3 голосов
/ 07 июня 2010

У меня есть банк изображений xml, довольно стандартный, и у меня есть загрузчик вместе с видеоклипами, в которые я хочу загружать изображения, проблема, с которой я сталкиваюсь, заключается в том, что я хочу, чтобы изображения загружались в отдельные видеоклипы поэтому я использую оператор case, чтобы указать, куда они идут. Однако я могу заставить их загружаться только в один фрагмент ролика, я предполагаю, что они загружаются друг на друга, и я не знаю, как заставить их разделиться. Я опубликую свой код. Это не имеет никакого смысла для меня, но если у вас есть какие-либо предложения, которые были бы очень хорошими.

Я могу сделать отдельные загрузчики, а затем просто сделать 1 изображение на каждый загрузчик, но это мне не подходит.

   var counterNumber:Number = 0;

   function callThumbs():void{
     for (var i:Number = 0; i <3; i++){
        thumbLoaded();
        counterNumber++;
     }
   }




    function thumbLoaded(){

    var photoLoader = new Loader();

    switch (counterNumber){

            case 1:
                photoLoader.load(new URLRequest(MovieClip(this.parent).xml.photos.imageOne.image.@url[0]));
                whole.boxOne.pictureLoader.addChild(photoLoader);
                trace("1Done");
                break;

            case 2:
                photoLoader.load(new URLRequest(MovieClip(this.parent).xml.photos.imageTwo.image.@url[0]));
                whole.boxTwo.pictureLoader.addChild(photoLoader);
                trace("2Done");
                break;    
       }
   }

1 Ответ

1 голос
/ 07 июня 2010

Вот как бы я поступил по этому поводу. Единственное, что я не сделал, это изменил положение мувиклипов после их загрузки с изображениями. Вы можете легко добавить эту функцию в функцию imageLoaded ().

Поместите следующий код на панель «Действия» первого кадра FLA-файла AS3. Это предполагает, что каталог с именем 'images' существует в том же каталоге, что и FLA / SWF.

//Create array of image filenames
var filenames:Array = new Array();
filenames[0] = 'some_image.jpg';
filenames[1] = 'some_other_image.jpg';
filenames[2] = 'and_another.jpg';

//Declare variables
const IMAGES_DIRECTORY:String = 'images/';
var loaders:Array = new Array();
var movieClips:Array = new Array();

//This function instantiates the exact number of Loader objects that are required
//and initiates the loading process for each image file. As each image is loaded,
//imageLoaded() is called
function createLoaders(filenamesAsArray:Array, directory:String):void
{
    for(var i:int = 0; i < filenamesAsArray.length; i++)
    {
        loaders[i] = new Loader();
        loaders[i].load(new URLRequest(directory + filenamesAsArray[i]));
        loaders[i].contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded);
    }
}

createLoaders(filenames, IMAGES_DIRECTORY);

//This function is called as each Loader object is completely loaded
//It creates each individual movieclip, adds the image to it, and then adds the MC to the stage
function imageLoaded(e:Event):void
{
    if(e.target.content.bitmapData)
    {
        var mc:MovieClip = new MovieClip();
        var bmp:Bitmap = new Bitmap(e.target.content.bitmapData);
        mc.addChild(bmp);
        movieClips.push(mc);
        addChild(movieClips[movieClips.length - 1]);
    }
}

Об импорте данных XML

Посмотрите на XML-объект .

Пример загрузки XML

XML-документ для примера:

<images>
    <image>
        <title>Portrait of a Woman</title>
        <filename>portrait.jpg</filename>
    </image>
    <image>
        <title>Rural Landscape</title>
        <filename>landscape.jpg</filename>
    </image>
    <image>
        <title>My Cat</title>
        <filename>cat.jpg</filename>
    </image>
</images>

AS3 для загрузки вышеуказанного XML-документа

//Instantiate some objects (URLoader and XML)
var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML = new XML();

//Listen for the instance of URLLoader (xmlLoader) to trigger Event.COMPLETE,
//which will call the function named 'loadXML()'
xmlLoader.addEventListener(Event.COMPLETE, loadXML);

//Initiate the process of loading the XML document
//In this case, 'test.xml' is located in the same directory as the SWF/FLA
//that this code is located in
xmlLoader.load(new URLRequest('test.xml'));

//This is the function that will be called by the event listener above (when
//the xmlLoader signals Event.COMPLETE
function loadXML(e:Event):void
{
    //Retrieve the contents of the XML document
    xmlData = new XML(e.target.data);

    //Trace the entire document:
    trace(xmlData);

    //Trace the filename for the first <image> node
    trace(xmlData.image[0].filename);
}

Конечно, ваш XML-документ может сильно отличаться, и в этом случае вам нужно попрактиковаться в получении точной информации, которую вы хотите. Это самая сложная часть, на мой взгляд. Кроме того, вы хотите создать экземпляр массива вне области действия функции loadXML, описанной выше. Затем рекурсивно заполните массив именами файлов из документа XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...