使用数组加载Actionscript中的多个图像

时间:2013-07-19 00:40:08

标签: actionscript-3 flash actionscript

我有一个课程作业,我必须创建一个照片库,其中一个规定是需要从外部源加载图像。我们分配的参考代码是:

var myRequest:URLRequest = new URLRequest("bw1.jpg");
myLoader.load(myRequest); 
addChild(myLoader); 

我的具体需求要求我一次最多可以在屏幕上复制2份图像,一份作为缩略图,另一份作为全尺寸图像。我想要它,以便当用户点击缩略图时,创建的图片的新实例被缩放为具有0 alpha的全尺寸,并且当新的图片以alpha增加时,当前所选图片的alpha减少。一旦旧图片不再可见,它将从舞台上移除。

我无法弄清楚如何在动作脚本中创建图像的副本,而且我的for循环似乎没有正确执行,因为即使我没有错误消息,它也只会经历一次迭代。

以下是通过pastebin我的代码的链接:http://pastebin.com/iadgKgsk但是为了避免在此之间来回切换,我也将在此处通过

import flash.display.Bitmap;

//creates a loader for each picture to be loaded, I know I could have an empty array  
that I add to but created a full array to test.

var loaders:Array = [new Loader(),new Loader(), new Loader(), new Loader(), new
Loader(), new Loader(), new Loader(), new Loader(), new Loader(), new Loader()];
 //stores the url request for each image to be loaded

var Requests:Array =[new URLRequest("pic1.jpg"),new URLRequest("pic2.jpg"),new 
URLRequest("pic3.jpg"),
new URLRequest("pic4.jpg"),new URLRequest("pic5.jpg"),new URLRequest("pic6.jpg"), new  
URLRequest("pic7.jpg"),
new URLRequest("pic8.jpg"), new URLRequest("pic9.jpg"),new URLRequest("pic10.jpg")];



//creates 2 empty arrays one to store the thumbnail sized pics the other fullsized.    
Ideally I want one Array holding the bitmap data and the other holding the thumbnail 
 instances since I only need 2
// fullsized images at a time I can just create a new one and erase the old one in a 
single function.

var pics:Array = new Array();
var pics2:Array = new Array();

//defines an empty bitMap variable as a placeholder for which to copy from redefined in
 every iteration of the loop

var test:Bitmap;

//loops through every loader
for (var i in loaders);
{
        // loads the loader and url request and creates a picture
        loaders[i].load(Requests[i]);

        //waits for the pic to load 
        loaders[i].contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);

        //after loader is loaded create pic from the data
        function loadComplete(evt:Event):void
       {
            var i = "Test";
            trace(i);
            test= evt.target.content as Bitmap;
            pics2[i] = test;
            pics[i] =new Bitmap(test.bitmapData);
            pics2[i] =new Bitmap(test.bitmapData);

    //creates an image on the stage at runtime to help debug

    var pic1 = new Bitmap(test.bitmapData);
            addChild(pics[i])
            pic1.scaleX = 0.138427734375;
            pic1.scaleY = 0.1384114583333333;
            pic1.x = 204;
            pic1.y = 20.6;
            pic1.alpha = .25;

            var pic2:Bitmap = new Bitmap(test.bitmapData);
            pic2.x =100;
            pic2.y =100;
            pic2.scaleX =.33;
            pic2.scaleY=.33;
            addChild(pic2);            
            loaders[i].contentLoaderInfo.removeEventListener(Event.COMPLETE,     
            loadComplete)
        }
}

1 个答案:

答案 0 :(得分:0)

你的for循环是以一种方式设置的,它会尝试迭代加载器实例的每个属性,这不是你想要的。您可能还想调查其他AS3批量加载程序选项,已经有一些脚本可以帮助解决这个问题。

你的循环应该看起来像

for(var i=0; i<loaders.length; i++)
{
    var curLoader = loaders[i].load(Requests[i]);

你还可以看到我放在一起的一个例子,它加载了一堆图像翻书风格的动画(用搅拌机生成的图像)​​:

http://www.shaunhusain.com/DrawTextRandomly/

http://www.shaunhusain.com/DrawTextRandomly/srcview/

查看utils.imageLoader包,我在那里制作了两个处理图像加载的类,因为它们是从Blender输出的,带有顺序文件名我只是使用了一些循环来加载基于数字计数器的图像,在你的如果您可以将其切换为使用要加载的图像源数组。

在BatchImageLoader类中,我有一个允许它生成多少个加载器的变量,我想看看内存与加载时间方面的性能差异(也取决于运行时环境,但我想得到一个通用想法,结束时最多使用90个装载机。