AS3, как загрузить внешние изображения в цикле? - PullRequest
0 голосов
/ 03 ноября 2010

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

Теперь я знаю, как загрузить одно изображение и добавить его в свой мувиклип, но все становится очень сложно, когда я хочу загрузить более 20 с помощью повторения цикла. Я посмотрел на множество примеров и просто не могу принять пример кода, чтобы работать на меня. Во всяком случае, без дальнейших действий, вот что я имею до сих пор.

// Load High scores from server var hiscoreloader:URLLoader = new URLLoader(); hiscoreloader.addEventListener(Event.COMPLETE, highScoresLoaded); var hiscorexml:XML; function highScoresLoaded(e:Event):void { hiscorexml = new XML(e.target.data); var hsList:XMLList = hiscorexml.highscores.highscore; for(var i:uint = 0; i < hsList.length(); i++) { this["hs_score_"+i].text = zeroPad(hsList.score.text()[i], 8); this["hs_name_"+i].text = hsList.name.text()[i]; // Load in Flag // url of flag will be: "http://wfwxg.philosophydesign.com/images/flags/" + hsList.country.text()[i] + ".png" // Move clip instance name the above image needs adding too will be: this["hs_flag_"+i] } } hiscoreloader.load(new URLRequest("http://wfwxg.philosophydesign.com/includes/top20.php?nocache=" + new Date().getTime()));

Может кто-нибудь изменить мой код, чтобы сделать то, что я после?

Большое спасибо

Scott

1 Ответ

2 голосов
/ 04 ноября 2010

Вот быстрое решение.

На практике я бы посоветовал инкапсулировать проблемы, чтобы ваш код не был слишком тесно связан Прямо сейчас вы обрабатываете почти все в одной функции, присваивая данные результата своему основному мувиклипу. Вот почему я создал массив для хранения данных XML и загруженных изображений.

Одной из возможных структур может быть:
- сначала получить данные XML и назначить их массиву данных.
- переберите массив данных для загрузки изображений и назначьте загруженный контент соответствующему объекту.
- После загрузки всех изображений используйте массив данных, чтобы настроить отображение

       // Load High scores from server
        var hiscoreloader:URLLoader = new URLLoader();

            //Create an Array to hold your XML data
        var data:Array = [];

        hiscoreloader.addEventListener(Event.COMPLETE, highScoresLoaded);

        var hiscorexml:XML;

        function highScoresLoaded(e:Event):void
        {
          hiscorexml = new XML(e.target.data);
              var hsList:XMLList = hiscorexml.highscores.highscore;

          for(var i:uint = 0; i < hsList.length(); i++)
          {
             //here we create a new Object to hold the retrieved data
             //and add it to the data Array
            data[i] = { 
                             hs_score:zeroPad(hsList.score.text()[i], 8), 
             hs_name: hsList.name.text()[i], 
             flagURL:"http://wfwxg.philosophydesign.com/images/flags/"
                             + hsList.country.text()[i] + ".png",
             mc_name:"hs_flag_"+i.toString();
            };

             //load the images
             var loader:Loader = new Loader();
             configureListeners(loader.contentLoaderInfo);  
             loader.name = i.toString();
             loader.load( new URLRequest( data[i].flagURL ) );
          }
        }

        function configureListeners(info:LoaderInfo):void
        {
            //add all your event listeners here
            info.addEventListener(Event.COMPLETE , completeHandler );
        }

        function removeListeners(info:LoaderInfo):void
        {
            //remove all your event listeners here
            info.removeEventListener(Event.COMPLETE , completeHandler );
        }


    function completeHandler(event:Event):void
    {
        var index:int = int( event.currentTarget.loader.name );
        //add the image data to your data Array
        data[index].flag = event.currentTarget.loader.content;
        removeListeners( event.currentTarget );
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...