AS3如何在循环中加载外部图像?

时间:2010-11-03 20:50:00

标签: flash actionscript-3 image load

我正在使用AS3在flash中创建一个高分表,我已成功获得显示名称和分数的工作代码,但也是我需要显示用户国家标志的高分表的一部分。标志的图像存储在远程服务器上。

现在我知道如何加载单个图像并将其添加到我的影片剪辑中,但是当我想通过迭代循环加载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()));

任何人都可以修改我的代码来做我想要的事吗?

非常感谢

斯科特

1 个答案:

答案 0 :(得分:2)

这是一个快速的解决方案。

实际上,我建议封装问题,以便您的代码不会过于紧密耦合。现在,在将结果数据分配给主MovieClip时,您可以在一个函数中处理几乎所有内容。这就是为什么我创建了一个Array来保存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 );
    }